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

Java 정규식 문자 클래스 완벽 가이드: 기본 문법부터 다양한 변형까지

Java 정규식 문자 클래스란?

Java 정규식에서 문자 클래스(character class)는 대괄호 "[ ]"를 사용하여 정의합니다. 이 하위 표현식은 지정된 문자 집합 또는 가능한 문자들의 집합 중 단 하나의 문자와 일치합니다.

예를 들어 정규식 [abc]는 'a', 'b', 'c' 중 하나의 문자와 일치하며, 마찬가지로 [a-z]는 알파벳 소문자 a부터 z 사이의 한 글자와 일치합니다.

문자 클래스의 다양한 변형

Java 정규식의 문자 클래스는 아래와 같은 여러 변형을 제공하여 더욱 유연하고 강력한 패턴 매칭을 가능하게 합니다.

1. 부정(Negation)

부정 변형은 "[^ ]" 형태로 정의하며, 대괄호 안에 ^ 기호를 넣어 표현합니다. 이는 지정된 문자 집합에 포함되지 않은 단일 문자와 일치합니다.

  • [^abc]: 'a', 'b', 'c'를 제외한 임의의 한 문자와 일치
  • [^a-z]: 알파벳 소문자 a~z가 아닌 문자와 일치

2. 범위(Range)

범위 변형을 사용하면 연속적인 문자 범위를 간편하게 지정할 수 있습니다.

  • [a-z]: 알파벳 소문자 a부터 z까지 중 하나의 문자와 일치
  • [^A-Z]: 대문자가 아닌 문자와 일치

3. 합집합(Union)

합집합 변형은 여러 문자 범위를 하나로 묶어, 그중 어느 하나에 해당하는 문자와 일치시킬 수 있습니다.

  • [a-z[0-9]]: 영소문자(a~z) 또는 숫자(0~9) 중 하나의 문자와 일치

4. 교집합(Intersection)

교집합 변형은 && 연산자를 사용하여 정의하며, 서로 겹치는 두 범위에 공통으로 속하는 문자와 일치합니다.

  • [a-z&&[r-u]]: 두 범위가 겹치는 r부터 u까지의 문자와 일치

5. 차집합(Subtraction)

차집합은 하나의 범위에서 다른 범위를 빼서 새로운 범위를 만드는 방식입니다. 이는 앞서 설명한 부정교집합 두 가지 변형을 조합하여 구현할 수 있습니다.

  • [a-l&&[^e-h]]: a~l 범위에서 e~h에 해당하는 문자를 제외한 결과, 즉 a~d와 i~l 사이의 문자와 일치

Java 코드 적용 예시

실제 Java 프로그램에서 문자 클래스를 활용하는 간단한 예시는 다음과 같습니다.

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

public class CharClassExample {
    public static void main(String[] args) {
        String text = "Hello World 123";
        // 영소문자 또는 숫자와 일치하는 패턴
        Pattern pattern = Pattern.compile("[a-z[0-9]]");
        Matcher matcher = pattern.matcher(text);
        while (matcher.find()) {
            System.out.print(matcher.group() + " ");
        }
        // 출력: e l l o o r l d 1 2 3
    }
}

정리

변형문법설명
기본[abc]지정된 문자 중 하나와 일치
부정[^abc]지정된 문자를 제외한 하나의 문자와 일치
범위[a-z]연속된 범위 내의 한 문자와 일치
합집합[a-z[0-9]]여러 범위 중 하나에 해당하는 문자와 일치
교집합[a-z&&[r-u]]두 범위에 공통인 문자와 일치
차집합[a-z&&[^e-h]]한 범위에서 다른 범위를 제외한 문자와 일치

문자 클래스는 Java 정규식의 가장 기본적이면서도 핵심적인 요소입니다. 위의 다양한 변형을 잘 조합하면 복잡한 텍스트 패턴도 간결하게 처리할 수 있습니다.