개발 지식/Java

[Java] 정규표현식 캡처 그룹과 비캡처 그룹

서하빈 2024. 1. 7. 11:32

정규표현식에서 그룹이란 ()로 감싸진 부분들을 의미한다.

 

캡처 그룹은 매칭 결과에서 해당 부분의 정보를 추출할 수 있는 그룹을 의미하고 비캡처 그룹은 해당 부분의 정보를 추출할 수 없는 그룹을 의미한다.

 

 

예시

String input = "A123 B456 C789";

Pattern pattern = Pattern.compile("([A-Z])(\\d+)");
Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
    System.out.println("전체 매칭: " + matcher.group(0));  // 전체 매칭
    System.out.println("첫 번째 그룹: " + matcher.group(1));  // 첫 번째 그룹 (대문자)
    System.out.println("두 번째 그룹: " + matcher.group(2));  // 두 번째 그룹 (숫자)
}

Pattern pattern = Pattern.compile("(?:[A-Z])(\\d+)");
Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
    System.out.println("전체 매칭: " + matcher.group(0));  // 전체 매칭
    System.out.println("첫 번째 그룹: " + matcher.group(1));  // 두 번째 그룹 (숫자)
}

- 비캡처 그룹은 괄호안에 ?: 기호를 사용하여 나타낼 수 있고 위의 예시와 같이 matcher.group() 메서드로 해당 그룹의 정보를 추출할 수 없게 된다.