Java 정규식에서 숫자가 아닌 문자(non-digit)를 찾으려면 메타 문자 "\D"를 사용하면 됩니다. \D는 숫자(0~9)를 제외한 모든 문자와 일치하며, 이를 활용하면 문자열에서 숫자가 아닌 문자의 개수를 세거나, 입력값이 특정 조건에 맞는지 검증할 수 있습니다.
예제 1: 숫자가 아닌 문자 개수 세기
다음 예제는 사용자로부터 문자열을 입력받아, 그 안에 포함된 숫자가 아닌 문자의 개수를 세는 프로그램입니다.
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("Enter a String");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String regex = "\\D";
// 정규식 컴파일
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
count++;
}
System.out.println("Number non-digit characters: "+count);
}
}실행 결과
Enter a String sample text 2425 36 Number non-digit characters: 13
위 실행 결과를 보면 입력 문자열 "sample text 2425 36"에는 공백과 알파벳 등 총 13개의 숫자가 아닌 문자가 포함되어 있습니다.
예제 2: 입력값 유효성 검사
이번 예제는 입력값이 숫자가 아닌 문자로만 구성된 10자리 문자열인지 확인하는 프로그램입니다. 정규식 "\D{10}"은 숫자가 아닌 문자가 정확히 10번 연속으로 나오는 경우에만 일치합니다.
import java.util.Scanner;
public class RegexExample {
public static void main( String args[] ) {
// 숫자가 아닌 문자 10개로만 구성된 입력값을 허용하는 정규식
String regex = "\\D{10}";
System.out.println("Enter input value: ");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
boolean result = input.matches(regex);
if(result) {
System.out.println("input matched");
}
else {
System.out.println("wrong input");
}
}
}실행 결과 1
Enter input value: sample abc input matched
실행 결과 2
Enter input value: sample1234 wrong input
첫 번째 실행 결과에서는 입력값 "sample abc"가 모두 숫자가 아닌 문자로 구성되어 있어 "input matched"가 출력됩니다. 반면 두 번째 결과에서는 "sample1234"에 숫자가 포함되어 있어 "wrong input"이 출력됩니다.
정리
\D 메타 문자는 \d(숫자와 일치)의 반대 개념으로, 숫자가 아닌 모든 문자와 일치합니다. {n} 수량자와 함께 사용하면 특정 길이의 비숫자 문자열 여부도 손쉽게 검사할 수 있으므로, 입력값 검증이나 데이터 필터링 작업에 유용하게 활용할 수 있습니다.