Matcher pattern() 메서드란?
java.util.regex.Matcher 클래스는 문자열 매칭(match) 작업을 수행하는 엔진 역할을 하는 클래스입니다. 이 클래스에는 별도의 생성자가 없으며, java.util.regex.Pattern 클래스의 matcher() 메서드를 호출하여 Matcher 객체를 생성하거나 얻을 수 있습니다.
Matcher 클래스의 pattern() 메서드는 현재 Matcher 객체가 해석하고 있는 Pattern 객체를 가져와 반환합니다. 즉, 매칭 작업에 사용된 정규 표현식 패턴을 다시 조회해야 할 때 유용하게 활용됩니다.
예제 1: 생년월일 유효성 검사
다음 예제는 사용자로부터 생년월일(MM/DD/YYYY 형식)을 입력받아 정규 표현식으로 유효성을 검사한 뒤, matcher.pattern() 메서드를 통해 매칭에 사용된 패턴을 출력합니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PatternExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("생년월일을 입력하세요 (MM/DD/YYYY)");
String date = sc.next();
String regex = "^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$";
// 패턴 객체 생성
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(date);
// 날짜 유효성 검사
if(matcher.matches())
System.out.println("유효한 날짜입니다");
else
System.out.println("유효하지 않은 날짜입니다");
// 사용된 패턴 조회
Pattern p = matcher.pattern();
System.out.println("입력된 날짜 매칭에 사용된 패턴: \n"+p);
}
}실행 결과
생년월일을 입력하세요 (MM/DD/YYYY)
01/21/2019
유효한 날짜입니다
입력된 날짜 매칭에 사용된 패턴:
^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$예제 2: 숫자로 시작하는 문자열 확인
이번 예제는 입력받은 문자열이 숫자로 시작하는지 여부를 정규 표현식으로 검사하고, pattern() 메서드로 사용된 정규식 패턴을 조회하여 함께 출력합니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PatternExample {
public static void main(String args[]) {
// 사용자로부터 문자열 입력 받기
System.out.println("문자열을 입력하세요");
Scanner sc = new Scanner(System.in);
String input = sc.next();
// 숫자로 시작하는 단어와 일치시키기 위한 정규 표현식
String regex = "^[0-9].*$";
// 정규 표현식 컴파일
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 가져오기
Matcher matcher = pattern.matcher(input);
Pattern p = matcher.pattern();
System.out.println("입력된 문자열 매칭에 사용된 패턴: "+p);
// 매칭 성공 여부 확인
if(matcher.matches())
System.out.println("첫 번째 문자는 숫자입니다");
else
System.out.println("첫 번째 문자는 숫자가 아닙니다");
}
}실행 결과
문자열을 입력하세요 2sample 입력된 문자열 매칭에 사용된 패턴: ^[0-9].*$ 첫 번째 문자는 숫자입니다
마무리
pattern() 메서드는 Matcher 객체가 현재 사용 중인 정규 표현식을 그대로 반환하기 때문에, 복잡한 정규식 로직을 디버깅하거나 로그에 적용된 패턴을 기록할 때 특히 유용합니다. Pattern과 Matcher의 관계를 잘 이해해 두면 자바에서 정규 표현식 기반의 문자열 처리를 훨씬 수월하게 구현할 수 있습니다.