자바의 java.util.regex 패키지는 문자열에서 특정 패턴을 찾기 위한 다양한 클래스를 제공합니다. 이 패키지에 속한 Pattern 클래스는 정규 표현식(regular expression)이 컴파일된 형태를 나타내며, 정규식 기반 문자열 처리의 핵심 역할을 담당합니다.
Pattern 클래스의 pattern() 메서드는 현재 패턴 객체를 생성할 때 사용된 원본 정규 표현식을 문자열(String) 형태로 가져와 반환합니다. 즉, 컴파일된 패턴으로부터 다시 정규식 소스를 확인할 수 있어 디버깅이나 로깅 작업에 유용하게 활용됩니다.
예제 1: 날짜 유효성 검사 패턴
import java.util.regex.Pattern;
public class PatternExample {
public static void main(String[] args) {
String date = "12/09/2019";
String regex = "^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$";
// 패턴 객체 생성
Pattern pattern = Pattern.compile(regex);
if(pattern.matcher(date).matches()) {
System.out.println("Date is valid");
} else {
System.out.println("Date is not valid");
}
// 현재 패턴의 정규 표현식 조회
String regularExpression = pattern.pattern();
System.out.println("Regular expression: "+regularExpression);
}
}실행 결과
Date is valid
Regular expression: ^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$위 예제에서는 MM/DD/YYYY 형식의 날짜를 검증하는 정규 표현식을 사용했습니다. Pattern.compile(regex)으로 패턴 객체를 만든 뒤 입력값과 비교하고, 마지막에 pattern() 메서드를 호출하여 해당 패턴이 어떤 정규식으로 구성되었는지 그대로 출력하는 것을 확인할 수 있습니다.
예제 2: 그룹을 활용한 패턴 매칭
public class PatternExample {
public static void main(String[] args) {
String input = "Hi my id is 056E1563";
// 그룹을 포함한 정규 표현식
String regex = "(.*)?(\d+)";
// 패턴 객체 생성
Pattern pattern = Pattern.compile(regex);
if(pattern.matcher(input).matches()) {
System.out.println("Match found");
} else {
System.out.println("Match not found");
}
// 현재 패턴의 정규 표현식 조회
String regularExpression = pattern.pattern();
System.out.println("Regular expression: "+regularExpression);
}
}실행 결과
Match found Regular expression: (.*)?(\d+)
두 번째 예제는 캡처 그룹(capture group)을 포함한 정규 표현식을 사용하여 문자열 내 숫자 패턴을 매칭합니다. 입력 문자열에 일치하는 부분이 존재하므로 "Match found"가 출력되며, pattern() 메서드를 통해 컴파일에 사용된 정규식 (.*)?(\d+)가 동일하게 반환됩니다.
정리
pattern() 메서드는 별도의 매개변수 없이 호출되며, 반환 타입은 String입니다. 컴파일된 Pattern 객체가 어떤 정규 표현식 기반으로 만들어졌는지 확인해야 할 때 간편하게 사용할 수 있습니다.