Java 정규식에서 하위 표현식이자 메타문자인 \d는 숫자(0~9) 한 자리와 일치하는 패턴입니다. 문자열에서 특정 숫자를 찾거나, 입력값이 올바른 형식의 숫자로 이루어져 있는지 검증할 때 널리 사용됩니다.
참고로 Java에서 정규식을 문자열로 작성할 때는 역슬래시(\)가 이스케이프 문자로 해석되기 때문에, 코드 내에서는 "\\d"처럼 역슬래시를 두 번 작성해야 합니다.
예제 1: \d로 숫자 매칭 횟수 세기
다음 예제는 \d 24 패턴을 사용하여 입력 문자열에서 "숫자 한 개 + 공백 + 24" 형태와 일치하는 부분이 몇 번 나타나는지 세어봅니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String args[]) {
String regex = "\\d 24";
String input = "This is sample text 12 24 56 89 24";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
int count = 0;
while(m.find()) {
count++;
}
System.out.println("매칭 횟수: " + count);
}
}실행 결과
매칭 횟수: 2
입력 문자열에는 "2 24"와 "9 24"라는 두 개의 조각이 패턴과 일치하므로 결과는 2가 됩니다.
예제 2: 10자리 전화번호 유효성 검사
다음은 사용자로부터 입력받은 값이 정확히 10자리 숫자로만 이루어져 있는지 검증하는 프로그램입니다. 여기서는 수량자(quantifier) {10}을 함께 사용하여 \d가 정확히 10번 반복되는 경우에만 매칭되도록 했습니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String args[]) {
String regex = "\\d{10}";
Scanner sc = new Scanner(System.in);
System.out.println("전화번호를 입력하세요 (10자리 숫자): ");
String input = sc.nextLine();
// Pattern 객체 생성
Pattern p = Pattern.compile(regex);
// Matcher 객체 생성
Matcher m = p.matcher(input);
if(m.find()) {
System.out.println("OK");
} else {
System.out.println("잘못된 입력입니다");
}
}
}실행 결과 1: 올바른 입력
전화번호를 입력하세요 (10자리 숫자): 9848022338 OK
실행 결과 2: 잘못된 입력
전화번호를 입력하세요 (10자리 숫자): 545 잘못된 입력입니다
첫 번째 실행에서는 10자리 숫자가 입력되어 "OK"가 출력되었지만, 두 번째 실행에서는 3자리만 입력되어 패턴과 일치하지 않으므로 "잘못된 입력입니다"가 출력됩니다.
정리
- \d: 숫자 한 자리(0~9)와 일치하는 메타문자
- {n}: 바로 앞의 패턴이 정확히 n번 반복됨을 의미하는 수량자
- Java 코드에서는 이스케이프 처리를 위해
\\d로 작성해야 함
이처럼 \d는 전화번호, 우편번호, ID 등 숫자 기반 데이터의 형식 검증에 활용할 수 있는 가장 기본적이면서도 유용한 정규식 요소입니다.