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

자바 정규식 문자 클래스 차집합(Subtraction) 완벽 가이드

자바 정규식에서는 하나의 문자 범위에서 다른 범위를 빼서 새로운 범위를 만들 수 있습니다. 이를 차집합(Subtraction)이라고 하며, 문자 클래스의 두 가지 기능인 부정(Negation)교집합(Intersection)을 조합하여 구현합니다.

차집합의 동작 원리

예를 들어, 범위 [a-l][^e-h]의 교집합을 구하면, a부터 l까지의 문자 중에서 e부터 h까지의 문자를 제외한 결과, 즉 a, b, c, d, i, j, k, l에 해당하는 새로운 범위가 만들어집니다.

문법은 다음과 같습니다.

[a-l&&[^e-h]]
  • [a-l] : a부터 l까지의 전체 범위
  • [^e-h] : e부터 h까지를 제외한 모든 문자 (부정)
  • && : 두 문자 클래스의 교집합을 의미하는 연산자

예제 코드

아래 예제는 사용자로부터 입력받은 문자열에서 위의 차집합 패턴과 일치하는 문자를 찾아 출력하고, 일치하는 문자의 개수를 세어 보여줍니다.

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

public class RegexExample1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();

        // 차집합 패턴: a~l 범위에서 e~h 제외
        String regex = "[a-l&&[^e-h]]";

        // Pattern 객체 생성
        Pattern pattern = Pattern.compile(regex);

        // 컴파일된 패턴으로 입력 문자열 매칭
        Matcher matcher = pattern.matcher(input);

        int count = 0;
        while (matcher.find()) {
            count++;
            System.out.print(matcher.group() + " ");
        }
        System.out.println("Number of matched characters: " + count);
    }
}

실행 결과

Enter input text:
abcdefghijklmnopq
a b c d i j k l Number of matched characters: 8

결과 분석

입력 문자열 abcdefghijklmnopq에서 패턴 [a-l&&[^e-h]]와 일치하는 문자는 총 8개입니다.

  • a부터 l 사이의 문자만 대상이 되므로 m, n, o, p, q는 제외됩니다.
  • 같은 이유로 e, f, g, h도 부정 조건에 의해 제외됩니다.
  • 따라서 최종적으로 a b c d i j k l의 8개 문자가 출력됩니다.

이처럼 차집합 기능을 활용하면 복잡한 문자 필터링 조건을 간결한 정규식 하나로 표현할 수 있어 코드의 가독성과 유지보수성이 크게 향상됩니다.