Matcher — 패턴 매칭 엔진

Matcher — 패턴 매칭 엔진

MatcherPattern을 해석해 문자 시퀀스에 대해 매칭 연산을 수행하는 엔진이에요. 패턴의 matcher 메서드를 호출해 패턴에서 만들어져요. MatchResult 인터페이스를 구현해요.

출처: Java API Reference

본문

public final class Matcher extends Object implements MatchResult

한 번 만들어지면 세 가지 매칭 연산을 수행할 수 있어요.

  • matches() — 입력 시퀀스 전체가 패턴과 일치하는지 시도해요.
  • lookingAt() — 입력 시퀀스에서 처음부터 패턴과 일치하는지 시도해요.
  • find() — 다음 부분 시퀀스가 패턴과 일치하는지 스캔해요.

각 메서드는 성공 여부를 나타내는 boolean을 반환해요. matcher는 입력의 일부인 region(영역) 이라는 부분 집합에서 일치를 찾아요. 기본적으로 region은 전체 입력을 포함하며 region 메서드로 바꾸고 regionStart/regionEnd로 조회할 수 있어요.

appendReplacement/appendTail 메서드는 일치한 부분 시퀀스를 새 문자열로 교체해 기존 버퍼/빌더에 모으는 데 함께 쓸 수 있어요. 더 편리한 replaceAll은 입력의 모든 일치 부분을 교체한 문자열을 만들어요.

상태와 그룹

matcher의 명시적 상태는 가장 최근 성공 매치의 시작·끝 인덱스와, 패턴의 각 캡처링 그룹이 캡처한 입력 부분 시퀀스의 시작·끝 인덱스 및 그 개수를 포함해요.

  • start() / start(int group) / start(String name) — 이전 매치 또는 그룹 캡처의 시작 인덱스를 반환해요.
  • end() / end(int group) / end(String name) — 마지막 일치 문자의 다음 오프셋을 반환해요.
  • group() / group(int group) / group(String name) — 이전 매치에 의해 일치/캡처된 입력 부분 시퀀스를 반환해요. 그룹이 매치되지 않았으면 null을 반환해요.
  • groupCount() — 캡처링 그룹 수를 반환해요(그룹 0은 전체 패턴이라 포함하지 않아요).
  • namedGroups() — 캡처링 그룹 이름을 그룹 번호로 매핑한 수정 불가능한 맵을 반환해요.
  • hasMatch() — 이전 매치/find 연산에서 유효한 매치가 있는지 반환해요.
  • toMatchResult() — 이 matcher의 매치 상태를 MatchResult로 반환해요.

매칭 메서드

  • matches() — 전체 region이 패턴과 일치하는지 시도해요.
  • find() — 다음 부분 시퀀스가 패턴과 일치하는지 찾아요.
  • find(int start) — 지정 인덱스에서 찾기 시작하고 matcher를 리셋해요.
  • lookingAt() — region의 시작에서 패턴과 일치하는지 시도해요(전체 region이 필요하진 않아요).

리셋과 패턴

  • pattern() / usePattern(Pattern) — 해석하는 패턴을 반환하거나 교체해요.
  • reset() / reset(CharSequence) — 상태를 버리고 추가 위치를 0으로 되돌려요. region은 기본(전체)으로 되돌아가요.

region 제어

  • region(int start, int end) — region의 한계를 설정해요.
  • regionStart() / regionEnd() — region의 시작/끝 인덱스를 반환해요.
  • hasTransparentBounds() / useTransparentBounds(boolean) — region 경계의 투명성을 조회/설정해요. 투명 경계에서는 lookahead/lookbehind/경계 매칭 구문이 region 밖을 볼 수 있어요(기본은 불투명).
  • hasAnchoringBounds() / useAnchoringBounds(boolean) — region 경계가 ^/$ 같은 앵커와 일치하는지 조회/설정해요(기본은 anchoring).

교체

  • quoteReplacement(String) — 리터럴 교체 문자열을 반환해요(백슬래시·달러 표시를 특별하게 취급하지 않음).
  • appendReplacement(StringBuffer/StringBuilder, String) — 이전 매치 전까지의 문자와 교체 문자열을 버퍼에 추가하고 추가 위치를 end()로 옮겨요. 교체 문자열은 $g/${name}처럼 캡처 그룹 참조를 포함할 수 있어요.
  • appendTail(StringBuffer/StringBuilder) — 남은 입력을 버퍼에 복사해요.
  • replaceAll(String) / replaceAll(Function<MatchResult, String>) — 모든 일치를 교체해요.
  • replaceFirst(String) / replaceFirst(Function<MatchResult, String>) — 첫 일치만 교체해요.
  • results() — 패턴과 일치하는 각 부분 시퀀스의 매치 결과 스트림을 반환해요(fail-fast).

기타

toString() — 디버깅에 유용한 문자열 표현을 반환해요. hitEnd() — 마지막 검색에서 입력 끝에 도달했는지, requireEnd() — 더 많은 입력이 매치를 바꿀 수 있는지 반환해요.

더 알아보기 (Learn more)