Java 정규식에서 문자 클래스(Character Class)는 대괄호 [ ]를 사용하여 정의합니다. 이 하위 표현식은 지정된 문자 집합 중 단 하나의 문자와 일치합니다. 예를 들어, 정규식 [abc]는 a, b, c 중 하나의 문자와 일치합니다.
문자 클래스의 교차(Intersection) 변형을 사용하면 서로 교차 관계에 있는 범위들 사이에서 공통으로 포함되는 문자만 매칭할 수 있습니다.
교차 관계는 && 연산자로 정의합니다. 예를 들어 [a-z&&[r-u]] 표현식은 소문자 전체 범위(a~z)와 범위(r~u)가 교차하므로, 결과적으로 r부터 u 사이의 단일 문자와 일치합니다.
예제 코드
다음 예제는 사용자로부터 입력받은 문자열에서 [a-z&&[r-u]] 패턴과 일치하는 문자의 개수를 세는 프로그램입니다.
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 = "[a-z&&[r-u]]";
// 패턴 객체 생성
Pattern pattern = Pattern.compile(regex);
// 컴파일된 패턴을 입력 문자열과 매칭
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("Number of matched characters: " + count);
}
}실행 결과
Enter input text: how are you welcome to tutorialspoint Number of matched characters: 9
결과 분석
입력 문자열 "how are you welcome to tutorialspoint"에서 r, s, t, u에 해당하는 문자는 다음과 같습니다.
- are: r (1개)
- you: u (1개)
- to: t (1개)
- tutorialspoint: t, u, t, r, s, t (6개)
따라서 총 9개의 문자가 패턴과 일치하게 됩니다. 이처럼 && 연산자를 활용한 문자 클래스 교차는 여러 조건을 동시에 만족하는 문자를 정교하게 필터링할 때 유용하게 사용됩니다.