Java 정규식에서 문자 클래스(Character Class)를 사용하면 고정된 문자 집합 중 하나의 문자와 일치시킬 수 있습니다. 대괄호 [] 안에 일치시키고 싶은 문자들을 나열하면 되는데, 이는 매우 유용한 패턴 매칭 기법입니다.
문자 클래스의 기본 문법
- [tmp] — 문자 t, m, p 중 하나와 일치합니다.
- [^tp] — t와 p를 제외한 모든 문자와 일치합니다. 즉,
^(캐럿) 기호는 부정(negation)을 의미합니다.
주요 특징
- 문자 클래스는 항상 단일 문자와만 일치합니다.
- 대괄호 안에서 하이픈(-)을 사용하면 범위를 지정할 수 있습니다. 예:
[a-z],[0-9] ^가 대괄호 맨 앞에 오면 해당 집합에 포함되지 않는 문자를 의미합니다.
예제 1: 특정 문자(t, m, p)의 출현 횟수 세기
다음 예제는 사용자로부터 문자열을 입력받아, 정규식 [tmp]를 사용해 문자 t, m, p가 몇 번 등장하는지 계산합니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String args[]) {
// 사용자로부터 문자열 입력 받기
System.out.println("문자열을 입력하세요");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
// 문자 t 또는 m 또는 p와 일치하는 정규식
String regex = "[tmp]";
// 정규식 컴파일
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
count++;
}
System.out.println("출현 횟수: " + count);
}
}실행 결과
문자열을 입력하세요 hello how are you welcome to tutorialspoint 출현 횟수 : 6
입력된 문자열에서 t, m, p에 해당하는 문자가 총 6번 발견되었습니다.
예제 2: 특정 문자 집합을 제외한 문자 세기
이번에는 부정 문자 클래스 [^abcdef]를 사용하여, 알파벳 a~f에 포함되지 않는 문자의 개수를 세어 보겠습니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String args[]) {
// 사용자로부터 문자열 입력 받기
System.out.println("문자열을 입력하세요");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
// a~f를 제외한 문자와 일치하는 정규식
String regex = "[^abcdef]";
// 정규식 컴파일
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
count++;
}
System.out.println("출현 횟수 :" + count);
}
}실행 결과
문자열을 입력하세요 Hello how are you welcome to tutorialspoint 출현 횟수 : 36
a부터 f까지의 문자를 제외한 나머지 문자(공백과 특수문자 포함)가 총 36번 일치했습니다.
정리
[문자들]: 대괄호 안의 문자 중 하나와 일치[^문자들]: 대괄호 안의 문자를 제외한 하나의 문자와 일치Pattern.compile()로 정규식을 컴파일하고,matcher()로 Matcher 객체를 얻은 뒤,find()메서드를 반복 호출하며 일치 횟수를 셀 수 있습니다.
문자 클래스를 활용하면 복잡한 반복문 없이도 간결하고 효율적으로 문자 검증 및 필터링 로직을 구현할 수 있습니다.