java.util.regex.MatchResult 인터페이스는 정규식 매칭 결과를 조회할 수 있는 다양한 메서드를 제공합니다.
이 인터페이스의 객체는 Matcher 클래스의 toMatchResult() 메서드를 통해 얻을 수 있습니다. 이 메서드는 현재 매처(matcher)의 매칭 상태를 나타내는 MatchResult 객체를 반환하며, 이를 통해 매칭 결과를 자유롭게 확인하고 활용할 수 있습니다.
이 중 groupCount() 메서드는 현재 객체의 정규식 패턴에 포함된 캡처 그룹(capturing group)의 개수를 세어 반환합니다. 참고로 전체 매칭을 의미하는 0번 그룹은 개수에서 제외됩니다.
groupCount() 메서드의 특징
- 정규식 패턴 내 괄호 ()로 묶인 그룹의 총 개수를 int 타입으로 반환합니다.
- 그룹 번호는 1부터 시작하며, 0번 그룹(전체 매칭)은 포함되지 않습니다.
- 매칭 성공 여부와 관계없이 패턴에 정의된 그룹 개수를 기준으로 동작합니다.
예제 코드
다음 예제는 사용자로부터 입력을 받아 정규식 (.*)(\d+)(.*) 패턴과 매칭한 후, groupCount() 메서드로 그룹의 개수를 출력합니다.
import java.util.Scanner;
import java.util.regex.MatchResult;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class GroupCount {
public static void main(String args[]) {
String regex = "(.*)(\\d+)(.*)";
// 사용자로부터 입력 받기
Scanner sc = new Scanner(System.in);
System.out.println("Enter input text: ");
String input = sc.nextLine();
// Pattern 클래스 인스턴스 생성
Pattern pattern = Pattern.compile(regex);
// Matcher 클래스 인스턴스 생성
Matcher matcher = pattern.matcher(input);
// 매칭 여부 확인
if (matcher.find()) {
System.out.println("Match found");
}
// MatchResult 객체 얻기
MatchResult res = matcher.toMatchResult();
// 그룹 개수 출력
int count = res.groupCount();
System.out.println("No.of groups: " + count);
}
}
실행 결과
Enter input text: This is a sample Text, 123 Match found No.of groups: 3
결과 분석
위 예제에서 사용된 정규식 (.*)(\d+)(.*)는 세 개의 캡처 그룹을 포함합니다.
- 첫 번째 그룹 (.*) – 숫자 앞부분의 임의의 문자열
- 두 번째 그룹 (\d+) – 하나 이상의 숫자
- 세 번째 그룹 (.*) – 숫자 뒷부분의 임의의 문자열
따라서 입력 문자열 "This is a sample Text, 123"이 매칭되면 groupCount() 메서드는 그룹 개수인 3을 반환하게 됩니다.