[Java] Pattern, Matcher Class

WonJun Jeon·2025년 10월 21일
0

Pattern Class

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 Class

Matcher 클래스는 Pattern의 matcher를 선언해 호출된다.
Matcher가 생성되면 세 가지 유형의 일치 작업을 수행하는 데 사용할 수 있다.

  • matches: 전체 입력 시퀀스를 패턴과 일치시킨다.
  • lookingAt: 패턴에 맞춰 입력 시퀀스를 처음부터 일치시킨다.
  • find: 패턴과 일치하는 다음 하위 시퀀스를 차기 위해 입력 시퀀스를 스캔한다.

각 메서드는 boolean을 return 한다.

활용 - grouping

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 인덱스 이후 패턴과 일치하는 다음 문자열을 찾는다.
profile
안녕하세요. 앞으로 나아가는 개발자, 전원준입니다.

0개의 댓글