부정 문자 클래스란?
Java 정규식(Regular Expression)에서 문자 클래스(character class)는 대괄호 "[ ]"를 사용하여 정의하며, 이 하위 표현식은 지정된 문자 집합 중 단 하나의 문자와 일치시킵니다.
예를 들어 정규식 [abc]는 a, b, c 중 하나의 문자와 일치하고, 마찬가지로 [a-z]는 a부터 z 사이의 알파벳 소문자 하나와 일치합니다.
문자 클래스의 부정(negation) 형태는 대괄호 안에 캐럿(^)을 넣어 [^ ]와 같이 정의합니다. 이 표현식은 지정된 문자 집합에 포함되지 않은 단일 문자와 일치합니다.
예를 들어 정규식 [^abc]는 a, b, c를 제외한 임의의 한 문자와 일치하며, [^a-z]는 a부터 z까지의 알파벳을 제외한 문자와 일치합니다.
예제 1
다음 예제는 부정 문자 클래스를 활용하여 입력된 문장에서 모음이 아닌 문자의 개수를 세는 프로그램입니다.
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();
String regex = "[^aeiou]";
// 패턴 객체 생성
Pattern pattern = Pattern.compile(regex);
// 컴파일된 패턴을 문자열과 매칭
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("Number of non-vowel characters : " + count);
}
}실행 결과
Enter input text: sample data Number of non-vowel characters : 7
결과 분석
입력값 "sample data"에는 s, m, p, l, d, t 그리고 공백 문자까지 총 7개의 모음이 아닌 문자가 포함되어 있습니다. 따라서 [^aeiou] 패턴은 이 7개의 문자와 각각 일치하게 되며, 최종적으로 7이 출력됩니다.
이처럼 부정 문자 클래스는 특정 문자나 범위를 제외한 나머지 문자만 추출하거나 검증할 때 유용하게 활용됩니다.