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

Java 정규 표현식 하위 표현식(그룹화) 완벽 이해하기

정규 표현식에서 하위 표현식(subexpression), 즉 메타문자 "( )"는 여러 개의 정규 표현식을 하나의 그룹으로 묶어주고, 매칭된 텍스트를 기억하는 역할을 합니다. 그룹화를 활용하면 복잡한 패턴을 논리적으로 구성할 수 있으며, 캡처된 결과를 나중에 참조할 수도 있습니다.

예제 1: 그룹화를 이용한 대체 패턴 매칭

다음 예제에서는 괄호 안에 OR 연산자(|)를 사용하여 "Hell" 또는 "How"로 시작하는 문자열을 찾습니다.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
    public static void main( String args[] ) {
        String input = "Hello how are you welcome to Tutorialspoint";
        String regex = "H(ell|ow)";
        // 정규 표현식 컴파일
        Pattern pattern = Pattern.compile(regex);
        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(input);
        if(matcher.find()) {
            System.out.println("Match found");
        } else {
            System.out.println("Match not found");
        }
    }
}

실행 결과

Match found

입력 문자열에는 "Hello"가 포함되어 있으므로, 그룹 (ell|ow)가 "ell"과 일치하여 전체 패턴이 매칭됩니다.

예제 2: 숫자를 포함한 문장 매칭

다음 예제에서는 숫자를 포함하고 있는 문장을 매칭해 보겠습니다. 여기서 (?:.*)는 비캡처 그룹(non-capturing group)으로, 매칭은 수행하지만 결과를 기억하지 않습니다.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PatternExample {
    public static void main(String[] args) {
        System.out.println("Enter input string: ");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        // 그룹을 사용한 정규 표현식
        String regex = "(?:.*)(\\d+)(.*)";
        // Pattern 객체 생성
        Pattern pattern = Pattern.compile(regex);
        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(input);
        boolean bool = matcher.matches();
        if(bool) {
            System.out.println("Match found");
        } else {
            System.out.println("Match not found");
        }
    }
}

실행 결과

Enter input string:
This is a 5363 test string
Match found

핵심 정리

  • ( ): 정규 표현식을 그룹으로 묶고 매칭된 텍스트를 캡처하여 기억합니다.
  • (?: ): 비캡처 그룹으로, 그룹화는 하지만 매칭 결과를 저장하지 않아 성능상 유리합니다.
  • | (OR 연산자): 그룹 내에서 여러 대체 패턴 중 하나와 일치하도록 지정합니다.
  • \\d+: 하나 이상의 숫자를 의미합니다.

이처럼 하위 표현식을 적절히 활용하면 복잡한 문자열 패턴도 체계적이고 효율적으로 처리할 수 있습니다.