Java 정규식에서 문자 클래스(Character Class)는 대괄호 "[ ]"로 정의되며, 지정된 문자 집합 가운데 하나의 단일 문자와 일치하는 하위 표현식입니다. 예를 들어 정규식 [abc]는 문자 a, b, c 중 하나와 일치합니다.
문자 클래스의 범위(Range)
문자 클래스의 범위 변형을 사용하면 연속된 문자 구간을 한 번에 표현할 수 있습니다. 대괄호 안에서 하이픈(-)으로 시작 문자와 끝 문자를 연결하면 됩니다. 예를 들어 정규식 [a-z]는 알파벳 소문자 a부터 z까지 중 한 글자와 일치하고, [^A-Z]처럼 대괄호 맨 앞에 캐럿(^)을 붙이면 '대문자가 아닌 문자'와 일치합니다.
또한 [a-zA-Z0-9]처럼 여러 범위를 조합하거나 [0-9]로 숫자 범위를 지정할 수도 있습니다. 범위 표기법을 활용하면 모든 문자를 일일이 나열하지 않고도 간결하게 패턴을 작성할 수 있습니다.
예제 1: 소문자 범위(a-z) 개수 세기
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("텍스트를 입력하세요: ");
String input = sc.nextLine();
String regex = "[a-z]";
// 패턴 객체 생성
Pattern pattern = Pattern.compile(regex);
// 컴파일된 패턴을 입력 문자열과 매칭
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("(a-z) 범위에 해당하는 문자 수: " + count);
}
}이 프로그램은 입력받은 문자열에서 a~z 범위에 속하는 문자가 몇 개인지 세어 출력합니다.
실행 결과
텍스트를 입력하세요: sample data 5423 #@ %*& (a-z) 범위에 해당하는 문자 수: 10
입력값 "sample data 5423 #@ %*&"에는 소문자가 총 10개(s, a, m, p, l, e, d, a, t, a) 포함되어 있으므로 결과로 10이 출력됩니다.
예제 2: 대문자 제외([^A-Z]) 매칭 확인
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("텍스트를 입력하세요: ");
String input = sc.nextLine();
String regex = "[^A-Z]";
// 패턴 객체 생성
Pattern pattern = Pattern.compile(regex);
// 컴파일된 패턴을 입력 문자열과 매칭
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
System.out.println("매칭 발생");
} else {
System.out.println("매칭 없음");
}
}
}[^A-Z] 패턴은 대문자를 제외한 모든 문자와 일치하며, find() 메서드로 매칭 여부를 확인합니다.
실행 결과 1
텍스트를 입력하세요: sample data 매칭 발생
실행 결과 2
텍스트를 입력하세요: SAMPLEDATA 매칭 없음
소문자로만 이루어진 "sample data"는 대문자가 아닌 문자를 포함하므로 매칭이 발생하지만, 전부 대문자인 "SAMPLEDATA"는 매칭되지 않습니다.