java.util.regex.Matcher 클래스는 다양한 매칭(match) 연산을 수행하는 엔진을 나타냅니다. 이 클래스는 별도의 생성자가 제공되지 않으며, java.util.regex.Pattern 클래스의 matcher() 메서드를 통해 객체를 생성하거나 얻을 수 있습니다.
Matcher 클래스의 lookingAt() 메서드는 검색 영역(region)의 시작 부분부터 입력 텍스트가 패턴과 일치하는지 확인합니다. 일치하면 true, 그렇지 않으면 false를 반환합니다. matches() 메서드와 달리 전체 영역이 패턴과 일치하지 않아도 시작 부분만 일치하면 true를 반환한다는 점이 핵심적인 차이입니다.
lookingAt()과 유사 메서드들의 차이점
- matches(): 입력 문자열의 전체가 패턴과 일치해야 true를 반환합니다.
- lookingAt(): 입력 문자열의 시작 부분만 패턴과 일치하면 true를 반환합니다.
- find(): 영역 내 어느 위치든 패턴과 일치하는 하위 시퀀스가 존재하면 true를 반환합니다.
예제 1: 기본 사용법
다음 예제는 정규식 (.*)(\d+)(.*)을 사용하여 입력 텍스트의 시작 부분에 숫자가 포함되어 있는지 확인합니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String regex = "(.*)(\\d+)(.*)";
String input = "This is a sample Text, 1234, with numbers in between. "
+ "\n This is the second line in the text "
+ "\n This is third line in the text";
// 패턴 객체 생성
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(input);
// 매칭 여부 확인
if(matcher.lookingAt()) {
System.out.println("Match found");
} else {
System.out.println("Match not found");
}
}
}
실행 결과
Match found
입력 텍스트의 시작 부분이 숫자를 포함하는 패턴과 일치하므로 "Match found"가 출력됩니다.
예제 2: 사용자 입력에서 숫자 포함 여부 확인하기
다음 예제는 Scanner를 통해 세 개의 문자열을 입력받은 뒤, lookingAt() 메서드로 입력 내용의 시작 부분에 숫자가 포함되어 있는지 검사합니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class LookingAtExample {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter String1: ");
String input1 = sc.nextLine();
System.out.println("Enter String2: ");
String input2 = sc.nextLine();
System.out.println("Enter String3: ");
String input3 = sc.nextLine();
String input = input1+"\n"+input2+"\n"+input3;
System.out.println(input);
// 숫자를 포함하는 단어와 일치하는 정규식
String regex = ".*\\d+.*";
// 정규식 컴파일
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 가져오기
Matcher matcher = pattern.matcher(input);
// 매칭 발생 여부 확인
boolean bool = matcher.lookingAt();
if(bool) {
System.out.println("Given input contains digit");
} else {
System.out.println("Given input does not contain any digit");
}
}
}
실행 결과
Enter String1: sample text2 Enter String2: data Enter String3: sample sample text2 data sample Given input contains digit
첫 번째 입력 문자열인 "sample text2"에 숫자 '2'가 포함되어 있고, lookingAt()은 영역의 시작 부분부터 매칭을 수행하기 때문에 "Given input contains digit"가 출력됩니다. 만약 첫 번째 줄에 숫자가 없었다면, 나머지 줄에 숫자가 있더라도 lookingAt()은 false를 반환했을 것입니다.