Pattern — 컴파일된 정규 표현식

Pattern — 컴파일된 정규 표현식

Pattern정규 표현식의 컴파일된 표현이에요. 문자열로 지정된 정규 표현식은 먼저 이 클래스의 인스턴스로 컴파일돼야 해요. 그 결과 패턴은 입력 문자 시퀀스를 정규 표현식에 대해 매칭할 수 있는 Matcher 객체를 만드는 데 사용돼요.

출처: Java API Reference

본문

public final class Pattern extends Object implements Serializable

매칭 수행에 관련된 모든 상태는 matcher에 있어서, 여러 matcher가 같은 패턴을 공유할 수 있어요. 전형적인 호출 순서는 다음과 같아요.

Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();

matches 편의 메서드는 정규 표현식을 한 번만 사용할 때 유용해요. Pattern.matches("a*b", "aaaaab")는 위 세 문장과 동등하지만, 컴파일된 패턴을 재사용할 수 없어 반복 매칭에는 덜 효율적이에요.

이 클래스의 인스턴스는 불변(immutable) 이고 여러 동시 스레드에서 안전하게 사용할 수 있어요. Matcher 인스턴스는 그렇지 않아요.

플래그 상수

  • UNIX_LINES — Unix 라인 모드. ., ^, $의 동작에서 \n 라인 종결자만 인식해요((?d)).
  • CASE_INSENSITIVE — 대소문자 무시 매칭. 기본은 US-ASCII를 가정하고, UNICODE_CASE와 함께 쓰면 유니코드 인식((?i)).
  • COMMENTS — 패턴의 공백·주석 허용((?x)).
  • MULTILINE^/$가 라인 종결자 앞뒤에서 일치((?m)).
  • LITERAL — 패턴을 리터럴 문자 시퀀스로 처리. 메타문자 의미 없음.
  • DOTALL.가 라인 종결자를 포함한 아무 문자나 일치((?s)).
  • UNICODE_CASE — 유니코드 인식 케이스 폴딩((?u)).
  • CANON_EQ — 정준 동등성(canonical equivalence) 매칭. 예: "a\u030A""\u00E5"와 일치.
  • UNICODE_CHARACTER_CLASS — 사전 정의/POSIX 문자 클래스의 유니코드 버전((?U)). UNICODE_CASE를 암시해요.

메서드

  • compile(String regex) / compile(String regex, int flags) — 정규 표현식을 컴파일해요. 잘못된 문법이면 PatternSyntaxException을 던져요.
  • pattern() / toString() — 컴파일된 정규 표현식 문자열을 반환해요.
  • matcher(CharSequence) — 입력에 대해 매칭할 Matcher를 만들어요.
  • flags() — 이 패턴의 매칭 플래그를 반환해요.
  • matches(String, CharSequence) — 컴파일+매칭 편의 메서드예요.
  • split(CharSequence, int limit) / split(CharSequence) — 패턴 매치 주위로 입력을 분할해요. limit은 적용 횟수(배열 길이)를 제어해요.
  • splitWithDelimiters(CharSequence, int) — 분할된 문자열과 일치하는 구분자 모두를 반환해요.
  • quote(String) — 문자열을 리터럴 패턴으로 만드는 문자열을 반환해요.
  • namedGroups() — 캡처 그룹 이름→번호 맵(수정 불가)을 반환해요.
  • asPredicate() / asMatchPredicate() — 이 패턴이 입력에서 발견되는지/일치하는지 검사하는 Predicate<String>을 만들어요.
  • splitAsStream(CharSequence) — 패턴 주위로 분할한 부분 문자열의 스트림을 만들어요.

정규 표현식 구성

Pattern은 문자(x, \\, \0n, \x{...}, \N{name}), 미리 정의된 문자 클래스(\d, \w, \s 등), 수량자(*, +, ?, {n,m}), 논리 연산자(|), 그룹((...), (?<name>...)), 앵커(^, $, \b) 등을 지원해요. 자세한 구성 목록은 공식 문서의 "Summary of regular-expression constructs"를 참고해요.

더 알아보기 (Learn more)