Java - 정규 표현식(Pattern, Matcher)
이전 글에 이어서 이번엔 Pattern과 Matcher를 알아보고자 한다.
이전 글:
Java - 정규 표현식(Regex)
알고리즘 문제를 풀면 풀수록 정규 표현식의 유능함이 느껴져서 이를 제대로 알아보고자 한다. Java에선 정규 표현식을 쉽게 활용할 수 있도록 Java.util.regex API(Pattern, Matcher)를 제공한다. 활용 방
dlise.tistory.com
Pattern & Matcher
Pattern, Matcher는 java.util.regex 패키지에 있다.
Pattern은 정규식을 정의, Matcher는 정의된 정규식을 데이터와 비교하는 데 사용된다.
사용 순서는 다음과 같다.
1. 정규식을 매개변수로 Pattern 클래스의 static 메서드인
Pattern compile(String regex)을 호출해 Pattern 인스턴스를 얻는다.
2. 정규식으로 비교할 대상을 매개변수로 Pattern클래스의
Mathcher matcher(CharSequence input)을 호출해서 Matcher 인스턴스를 얻는다.
3. Mathcher 인스턴스에 boolean matches()를 호출해 정규식에 부합하는지 확인한다.
말이 어렵지만 간단히 보면
1. Pattern pattern = Pattern.compile(String regex)로 사용할 정규식을 pattern에 담는다.
2. Matcher matcher = pattern.matcher(String s)로 비교할 문자열 s를 matcher에 담는다.
3. matcher.matches()로 결과를 확인한다.
이다.
과정을 하나하나 살펴보자.
1번 과정
아래 코드는 Pattern 클래스의 compile 메서드이다. Pattern 인스턴스를 반환하는 것을 확인할 수 있다.
이를 사용해 본 코드이다.
import java.util.regex.*;
public class PatternMatcher {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("[a-z]*");
System.out.println(pattern.toString());
}
}
참고로 [a-z]*는 a~z가 0번 이상 나온 것을 의미한다.
2번 과정
다음은 Matcher 인스턴스를 얻어보자.
Matcher의 인스턴스는 Pattern 클래스의 matcher 메서드로 얻는다.
아래는 Pattern 클래스의 matcher 메서드이다.
Matcher 인스턴스를 새로 생성해 반환하는 것을 볼 수 있다.
3번 과정
이제 Matcher 클래스의 matches 메서드를 활용해 부합하는 문자열을 찾아보자.
샘플로 "000", "aaa", "bcd", "hello", "hello world", "", "111", "안녕", "aa1", "1aa", "aa"를 준비했다.
정규식이 [a-z]* 이므로 문자열의 길이가 0 or a ~ z로만 이루어져야 한다.
import java.util.regex.*;
public class PatternMatcher {
public static void main(String[] args) {
String[] data = {"000", "aaa", "bcd", "hello", "hello world", "", "111", "안녕", "aa1", "1aa", "aa"};
Pattern pattern = Pattern.compile("[a-z]*");
for(String s : data) {
Matcher matcher = pattern.matcher(s);
if(matcher.matches())
System.out.println(s + " ");
}
}
}
아래는 출력 결과이다. 올바르게 걸러졌음을 알 수 있다.