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 정규식의 가장 기본적이면서도 핵심적인 요소입니다. 위의 다양한 변형을 잘 조합하면 복잡한 텍스트 패턴도 간결하게 처리할 수 있습니다.