java.util.regex.Matcher 클래스는 정규 표현식을 기반으로 다양한 매칭 작업을 수행하는 엔진 역할을 하는 클래스입니다. 이 클래스에는 별도의 생성자가 정의되어 있지 않으며, java.util.regex.Pattern 클래스의 matcher() 메서드를 호출하여 객체를 생성할 수 있습니다.
regionStart() 메서드는 현재 Matcher 객체에 설정된 검색 영역(region)의 시작 인덱스를 나타내는 정수 값을 반환합니다. 별도로 영역을 설정하지 않으면 기본값인 0을 반환합니다.
regionStart() 메서드의 주요 특징
- 반환 타입은 int이며, 현재 검색 영역의 시작 위치를 나타냅니다.
- region(int start, int end) 메서드를 사용하면 매칭 대상 범위를 문자열의 일부 구간으로 제한할 수 있습니다.
- regionEnd() 메서드와 함께 사용하면 영역의 끝 인덱스도 함께 확인할 수 있습니다.
예제 1: find() 메서드와 함께 사용하기
다음 예제는 입력 문자열에서 '#' 문자를 찾는 정규 표현식을 사용하고, region(2, 4)로 검색 영역을 설정한 후 find() 메서드로 매칭 여부를 확인합니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegionStartExample {
public static void main(String[] args) {
// '#' 문자를 찾기 위한 정규 표현식
String regex = "[#]";
System.out.println("문자열을 입력하세요: ");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
// 패턴(Pattern) 객체 생성
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(input);
// 입력 문자열에 검색 영역 설정
matcher.region(2, 4);
if (matcher.find()) {
System.out.println("일치하는 항목을 찾았습니다");
} else {
System.out.println("일치하는 항목을 찾지 못했습니다");
}
System.out.println("검색 영역의 시작 인덱스: " + matcher.regionStart());
}
}
실행 결과
문자열을 입력하세요: #sample text 일치하는 항목을 찾지 못했습니다 검색 영역의 시작 인덱스: 2
입력 문자열 "#sample text"에서 region(2, 4)으로 지정된 영역은 인덱스 2부터 3까지, 즉 "am" 두 글자에 해당합니다. 이 범위 안에는 '#' 문자가 없으므로 매칭에 실패하지만, regionStart() 메서드는 영역의 시작 인덱스인 2를 그대로 반환합니다.
예제 2: matches() 메서드와 함께 사용하기
다음 예제는 숫자를 포함하는 패턴으로 전체 매칭(matches())을 시도하되, region(5, 20)으로 검색 범위를 제한한 경우입니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegionStartExample {
public static void main(String[] args) {
String regex = "(.*)(\\d+)(.*)";
String input = "124 This is a sample Text, 1234, with numbers in between.";
// 패턴(Pattern) 객체 생성
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(input);
// Matcher의 검색 영역 설정
matcher.region(5, 20);
if (matcher.matches()) {
System.out.println("일치하는 항목을 찾았습니다");
} else {
System.out.println("일치하는 항목을 찾지 못했습니다");
}
System.out.print("검색 영역의 시작 인덱스: " + matcher.regionStart());
}
}
실행 결과
일치하는 항목을 찾지 못했습니다 검색 영역의 시작 인덱스: 5
region(5, 20)으로 잘라낸 구간에는 숫자가 포함되어 있지 않아 matches()는 실패하지만, regionStart() 메서드는 설정된 영역의 시작 인덱스인 5를 반환합니다.
정리
regionStart() 메서드는 Matcher 객체의 검색 영역 시작 인덱스를 간편하게 확인할 수 있는 메서드입니다. region(), regionEnd() 등의 메서드와 함께 활용하면 긴 문자열에서 원하는 구간만 정밀하게 매칭 처리할 수 있으므로, 성능 최적화나 부분 문자열 분석에 유용하게 사용됩니다.