Pattern 클래스는 정규 표현식을 다루기 위한 클래스이다.
주로 Pattern.compile(String regex) 메서드를 통해 정규식을 컴파일하고, 이를 기반으로 생성된 Matcher 객체를 사용하여 문자열 매칭 작업을 수행한다.
일반적인 호출 순서는 아래와 같습니다.
Pattern pattern = Pattern.compile("a*b");
Matcher matcher = pattern.matcher("aaaaab");
boolean isFind = matcher.find(); // true
Pattern으로 정규식을 한 번만 인스턴스 생성하면 Matcher로 재사용할 수 있기 때문에 효율적이다.
만약 아래와 같이 사용하면 위 세 문장과 동일하지만 컴파일된 패턴을 재사용할 수 없기 때문에 효율성 측면에서 떨어진다.
boolean isFind = Pattern.matches("a*b", "aaaaab");
| 메서드 | 설명 |
|---|---|
| static Pattern compile(String regex) | 주어진 정규식을 갖는 패턴을 컴파일 |
| static Pattern compile(String regex, int flags) | 주어진 정규식을 flags가 있는 패턴으로 컴파일 |
| String pattern() | 패턴이 컴파일된 정규식 반환 |
| Matcher matcher(CharSequence input) | 패턴에 매칭할 문자열을 입력해 Matcher 생성 |
| static String quote(String s) | s에 대한 문자열을 그대로 패턴 반환 |
| String[] split(CharSequence input) | 패턴이 일치하는 항목을 중심으로 input 분할 |
| String[] split(CharSeuence input, int limit) | limit -1의 횟수만큼 패턴 일치를 시켜 문자열을 자름(문자열이 limit개 생성) 만약 0이하라면 최대한 많이 적용 |
Matcher 클래스는 Pattern의 matcher를 선언해 호출된다.
Matcher가 생성되면 세 가지 유형의 일치 작업을 수행하는 데 사용할 수 있다.
각 메서드는 boolean을 return 한다.
Matcher에 주어진 input 문자열을 패턴에 맞는지 확인하거나 패턴과 일치하는 문자열을 반복해 추출할 수 있는데, 이때 find() 메소드와 group() 메소드가 사용된다. find() 메소드는 패턴이 일치하는 다음 문자열이 존재한다면 true를 반환하기 때문에 while문을 통해 문자열의 끝까지 조회가 가능하다.
Pattern pattern = Pattern.compile("([0-9]+)([SDT])([*#]?)");
Matcher matcher = pattern.matcher("1D2S#10S*");
while (matcher.find()) {
System.out.println(mathcer.group());
}
// 1D
// 2S#
// 10S*
| 메서드 | 설명 |
|---|---|
| Pattern pattern() | matcher가 해석하는 패턴을 반환 |
| Matcher region(int start, int end) | matcher의 범위 설정 |
| String replaceAll(String replacement) | 패턴과 일치하는 모든 문자열을 지정된 replacement로 변경 |
| String replaceFirst(String replacement) | 패턴과 일치하는 첫 번째 문자열을 replacement로 변경 |
| Matcher usePattern(Pattern newPattern) | matcher가 사용할 Pattern 변경 |
| int start() | 매칭하는 문자열의 시작 인덱스 반환 |
| int start(int group) | 매칭 문자열 중 group번째 문자열의 시작 인덱스 반환 0은 그룹의 전체 패턴을 의미 start(0) = start() |
| int start(String name) | 매칭 문자열 중 해당 name을 지정한 그룹의 시작 인덱스 반환 |
| int end() | 일치하는 문자열의 마지막 문자열 이후(+1) 인덱스 반화 |
| int end(int group) | 매칭 문자열 중 group번째 그룹의 마지막 문자열 이후 인덱스 반환 0은 그룹의 전체 패턴을 의미 end(0) = end() |
| int end(String name) | 매칭 문자열 중 해당 name을 지정한 그룹의 마지막 문자열 이후 인덱스 반환 |
| String group() | 매치와 일치하는 문자열 반환 |
| String group(int group) | 매칭되는 문자열 중 group번째 그룹의 문자열 반환 0은 그룹의 전체 패턴을 의미 group(0) = group() |
| String group(String name) | 매칭되는 문자열 중 해당 name을 지정한 그룹의 문자열 반환 |
| int groupCount() | 패턴 내에 그룹핑한 개수를 반환(패턴에 있는 괄호 개수) |
| boolean find() | 패턴이 일치하는 다음 문자열 찾는다 |
| boolean find(int start) | matcher 재설정 후, start 인덱스 이후 패턴과 일치하는 다음 문자열을 찾는다. |