Java의 java.util.regex 패키지는 문자 시퀀스에서 특정 패턴을 찾기 위한 다양한 클래스를 제공합니다. 이 패키지를 활용하면 복잡한 문자열 검색, 치환, 유효성 검사 작업을 손쉽게 처리할 수 있습니다.
이 패키지의 핵심인 Pattern 클래스는 정규 표현식(Regular Expression)의 컴파일된 표현입니다. 이 클래스의 matcher() 메서드는 입력 문자열을 나타내는 CharSequence 객체를 매개변수로 받아, 현재 Pattern 객체가 담고 있는 정규 표현식과 주어진 문자열을 대조할 수 있는 Matcher 객체를 반환합니다.
matcher() 메서드의 동작 흐름
정규 표현식 매칭은 일반적으로 다음 세 단계로 진행됩니다.
1. 정규 표현식 컴파일
Pattern.compile(regex)을 호출하여 문자열 형태의 정규 표현식을 Pattern 객체로 변환합니다.
2. Matcher 객체 생성
pattern.matcher(input)을 호출하여 대상 문자열과 연결된 Matcher 객체를 얻습니다.
3. 매칭 수행
Matcher 객체의 find(), matches(), lookingAt() 등의 메서드를 호출해 실제 패턴 검색을 실행합니다.
예제 코드
다음 예제는 사용자로부터 문자열을 입력받아 모음(a, e, i, o, u)이 포함되어 있는지 확인하는 프로그램입니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MatcherExample {
public static void main(String args[]) {
// 문자열 입력 받기
Scanner sc = new Scanner(System.in);
System.out.println("문자열을 입력하세요");
String input = sc.nextLine();
// 모음을 찾기 위한 정규 표현식
String regex = "[aeiou]";
// 정규 표현식 컴파일
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(input);
if(matcher.find()) {
System.out.println("입력한 문자열에는 모음이 포함되어 있습니다");
} else {
System.out.println("입력한 문자열에는 모음이 포함되어 있지 않습니다");
}
}
}실행 결과
문자열을 입력하세요 RHYTHM 입력한 문자열에는 모음이 포함되어 있지 않습니다
핵심 포인트 정리
위 예제에서 입력된 "RHYTHM"은 영어 단어 중 드물게 모음을 전혀 포함하지 않는 단어이므로, find() 메서드가 false를 반환하여 else 블록이 실행됩니다. 만약 "Hello"처럼 모음이 포함된 문자열을 입력하면 첫 번째 조건문이 실행됩니다.
참고로 find()는 문자열 전체가 아닌 일부라도 패턴과 일치하면 true를 반환하지만, matches()는 문자열 전체가 정규 표현식과 완전히 일치해야 true를 반환한다는 점에서 차이가 있습니다. 용도에 맞게 적절한 메서드를 선택하는 것이 중요합니다.