개발지식 먹는 하마 님의 블로그
Java - Pattern & Matcher 본문
Pattern과 Matcher는 Java의 정규 표현식(Regax)을 처리하는 클래스이다.
이를 사용하면 문자열을 좀 더 자유자재로 다룰 수 있다.
Pattern
- 정규 표현식을 컴파일하여 Matcher 객체를 생성한다.
- 한 번 생성되면 변경할 수 없다.
compile(String regex) | 정규식을 컴파일하여 Pattern 객체를 생성한다. |
compile(String regex, int flags) | 특정 플래그와 함께 컴파일한다. |
matches(String regex, CharSequence input) | 문자열이 정규식과 완전히 일치하는지 확인한다. |
split(CharSequence input) | 문자열을 분리하여 배열로 반환한다. |
Matcher
- Pattern 객체를 사용해 문자열과 패턴을 비교한다.
matches() | 전체적으로 패턴과 일치하는지 확인 |
find() | 입력 문자열의 일부라도 패턴과 일치하는 부분을 찾는다. |
group() | find()로 찾은 문자열을 반환 |
start(), end(), replace 등의 메서드도 있다.
matches와 String의 equals는 전혀 다른 기능임을 유의하자!
정규 표현식
문자열 Split에서도 사용이 가능하다.
표현식 | 의미 |
[a-z] | 알파벳 소문자 |
[A-z] | 알파벳 대문자 |
[0-9] | 숫자 0~9 |
[aeiou] | 모음 aeiou 중 하나 |
[^a-z] | 소문자가 아닌 모든 문자 |
. | 줄바꿈 제외, 임의의 문자 |
\d | 숫자 |
\D | 숫자가 아닌 문자 |
\s | 공백 문자 |
\S | 공백이 아닌 문자 |
- 수량자 -
표현식 | 의미 |
a+ | a가 1번 이상 반복 |
a* | a가 0번 이상 반복 |
a? | a가 0번 또는 1번 등장 |
a[n, n1] | a가 n~n1번 반복 |
- 앵커 -
^a : a로 시작하는 문자열
a$ : a로 끝나는 문자열
예시
연산을 입력 받아서 숫자와 문자로 나누고 싶을 때,
숫자와 사칙연산 기호에 대하여 문자열을 나눌 수 있도록 컴파일한다.
\\d+ : 한 자리 이상의 숫자
[+\\-*/] : \\를 사용해 특수기호임을 나타낸다. []안에 들어가는 문장에는 \\가 임의로 이미 적용되기 때문에 + 뒤에 \\를 사용했다. 그러나 생략해도 무방하다.
Pattern pattern = Pattern.compile("\\d+|[+\\-*/]"); // 숫자 또는 연산자 추출
패턴과 문자열이 일치하는지를 확인한다.
Matcher matcher = pattern.matcher(input);
하나씩 매칭되는 값을 찾고 이를 가져온다.
while (matcher.find()) {
tokens.add(matcher.group()); // 찾은 숫자 또는 연산자 추가
}
-전체 예시-
public class RegexMatcherExample {
public static void main(String[] args) {
String input = "12+34-56*78/90"; // 입력 문자열
Pattern pattern = Pattern.compile("\\d+|[+\\-*/]"); // 숫자 또는 연산자 추출
Matcher matcher = pattern.matcher(input);
ArrayList<String> tokens = new ArrayList<>();
while (matcher.find()) {
tokens.add(matcher.group()); // 찾은 숫자 또는 연산자 추가
}
System.out.println(tokens);
}
}
'Java' 카테고리의 다른 글
Spring Framework 1편 (4) | 2025.08.08 |
---|---|
Java - Enum (0) | 2025.03.11 |
Java - GUI JFrame (0) | 2025.02.25 |
Java - 람다(Lambda) & 스트림(Stream) (0) | 2025.02.25 |
Java - 제네릭 (Generic) (0) | 2025.02.25 |