Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 정규식 캡처 그룹 수 계산 방법 – Matcher.groupCount() 활용


정규식에서 여러 문자를 하나의 단위로 묶어 다루고 싶다면 캡처 그룹(capturing group)을 사용하면 됩니다. 캡처 그룹은 해당 문자들을 소괄호 ()로 감싸는 것만으로 간단히 만들 수 있으며, 매치된 문자열 중 특정 부분만 따로 추출할 때 특히 유용합니다.

현재 매치에 포함된 그룹의 개수는 Matcher 클래스의 groupCount() 메서드를 통해 확인할 수 있습니다. 이 메서드는 패턴에 정의된 캡처 그룹의 총 개수를 계산하여 반환합니다.

예제 코드

아래 예제는 't'로 시작하고 't'로 끝나는 단어를 찾는 정규식을 사용해, 매치된 단어들과 캡처 그룹의 개수를 출력합니다.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) {
        // 't'로 시작하고 't'로 끝나는 단어와 그 뒤의 공백을 찾는 정규식
        String regex = "(t(\\S+)t)(\\s)";
        String str = "the words tit tat tweet tostff tact that tilt text start and end with the letter t";
        // Pattern 객체 생성
        Pattern pattern = Pattern.compile(regex);
        // 컴파일된 패턴을 문자열에 적용
        Matcher matcher = pattern.matcher(str);
        while (matcher.find()) {
            System.out.println(matcher.group(0));
        }
        System.out.println("총 캡처 그룹 수: " + matcher.groupCount());
    }
}

정규식 패턴 분석

예제에 사용된 정규식 (t(\S+)t)(\s)는 세 개의 캡처 그룹으로 구성되어 있습니다.

  • 그룹 1 – (t(\S+)t): 't'로 시작해서 't'로 끝나는 전체 단어
  • 그룹 2 – (\S+): 앞뒤 't' 사이에 위치한 문자들
  • 그룹 3 – (\s): 단어 바로 뒤에 오는 공백 문자

group(0)은 매치된 전체 문자열을 반환하지만 캡처 그룹에는 포함되지 않는다는 점에 유의하세요. 따라서 groupCount()가 반환하는 값은 3이 됩니다.

실행 결과

tit
tat
tweet
tact
that
tilt
text
tart
총 캡처 그룹 수: 3