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