Java 정규식 \D 메타문자란?
Java 정규식에서 하위 표현식이자 메타문자인 \D는 숫자가 아닌 문자(non-digit)와 일치합니다. 즉, 0~9를 제외한 모든 문자(알파벳, 공백, 특수문자 등)를 찾을 때 사용됩니다.
참고로 \D는 숫자를 의미하는 \d의 반대 개념으로, 대소문자에 따라 의미가 정반대가 되므로 주의해서 사용해야 합니다.
예제 1 – 문자열에서 숫자가 아닌 문자 개수 세기
다음 예제는 입력 문자열에서 \D 패턴과 일치하는(즉, 숫자가 아닌) 문자의 개수를 계산합니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String args[]) {
String regex = "\\D";
String input = "This is sample text 12 24 56 89 24";
// Pattern 객체 생성
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
int count = 0;
while(m.find()) {
count++;
}
System.out.println("일치 횟수: " + count);
}
}실행 결과
일치 횟수: 24
입력 문자열에는 총 10개의 숫자가 포함되어 있으며, 나머지 24개의 문자(알파벳과 공백)가 \D 패턴과 일치했습니다.
예제 2 – 여러 문자열에서 숫자가 아닌 문자 개수 세기
다음 예제는 Scanner를 이용해 사용자로부터 5개의 문자열을 입력받은 뒤, 각 문자열에서 숫자가 아닌 문자가 몇 개인지 출력합니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String args[]) {
String regex = "\\D";
Scanner sc = new Scanner(System.in);
System.out.println("5개의 문자열을 입력하세요: ");
String input[] = new String[5];
for (int i = 0; i < 5; i++) {
input[i] = sc.nextLine();
}
// Pattern 객체 생성
Pattern p = Pattern.compile(regex);
System.out.println("각 문자열의 숫자가 아닌 문자 개수: ");
for(int i = 0; i < 5; i++) {
// Matcher 객체 생성
Matcher m = p.matcher(input[i]);
int count = 0;
while(m.find()) {
count++;
}
System.out.println("문자열 " + i + ": " + count);
}
}
}실행 결과
5개의 문자열을 입력하세요: sample 1 12 35 36 63 test 243 663 hello hello how are you * 각 문자열의 숫자가 아닌 문자 개수: 문자열 0: 7 문자열 1: 3 문자열 2: 6 문자열 3: 5 문자열 4: 19
정리
- \D : 숫자가 아닌 모든 문자와 일치 ([^0-9]와 동일)
- \d : 숫자 하나와 일치 ([0-9]와 동일)
이처럼 \D 메타문자를 활용하면 문자열에서 숫자를 제외한 부분만 손쉽게 추출하거나 검증할 수 있어, 입력값 유효성 검사나 데이터 클렌징 작업에 유용하게 사용됩니다.