정규식에서 여러 문자를 하나의 단위로 묶어 다루고 싶다면 캡처 그룹(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