Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 정규식 POSIX 문자 클래스 \p{Digit} 완벽 가이드

POSIX 문자 클래스 \p{Digit}는 십진수 숫자 0부터 9까지와 일치하는 Java 정규식 패턴입니다. 문자열에서 숫자를 찾거나, 입력값이 숫자로만 구성되어 있는지 검증할 때 유용하게 활용됩니다.

예제 1: 문자열 내 숫자 개수 세기

다음 예제는 사용자로부터 문자열을 입력받아 \p{Digit} 패턴으로 포함된 숫자의 개수를 세는 프로그램입니다.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DigitsExample {
    public static void main(String args[]) {
        // 사용자로부터 문자열 입력받기
        System.out.println("Enter a string");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        // 정규식 정의
        String regex = "[\\p{Digit}]";
        // 정규식 컴파일
        Pattern pattern = Pattern.compile(regex);
        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while(matcher.find()) {
            count++;
        }
        System.out.println("Number of digits: "+count);
    }
}

실행 결과 1

문자열에 숫자가 포함된 경우, 해당 숫자들의 총 개수가 출력됩니다.

Enter a string
sample text 22 37 48 84
Number of digits: 8

실행 결과 2

반면, 숫자가 전혀 없는 문자열을 입력하면 개수가 0으로 출력됩니다.

Enter a string
Welcome to tutorilspoint
Number of digits: 0

예제 2: 숫자로만 구성된 문자열 검증하기

이번 예제에서는 앵커(^$)를 활용한 ^\p{Digit}+$ 패턴으로, 입력받은 여러 문자열 중 오직 숫자로만 이루어진 문자열을 걸러내는 방법을 보여줍니다.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
    public static void main( String args[] ) {
        // 숫자만 일치시키는 정규식
        String regex = "^\\p{Digit}+$";
        // 입력 데이터 받기
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter 5 input strings: ");
        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("Strings with only digits: ");
        for(int i=0; i<5;i++) {
            // Matcher 객체 생성
            Matcher m = p.matcher(input[i]);
            if(m.matches()) {
                System.out.println(m.group());
            }
        }
    }
}

실행 결과

알파벳, 특수문자 등이 섞인 문자열은 제외되고, 숫자로만 구성된 문자열만 출력되는 것을 확인할 수 있습니다.

Enter 5 input strings:
hello
1234
243test
##$$@
222356
Strings with only digits:
1234
222356

정리

\p{Digit}는 단일 숫자 문자와 일치하며, 대괄호 [\p{Digit}] 형태나 수량자를 조합해 다양한 방식으로 활용할 수 있습니다. 문자열 전체가 숫자인지 확인하려면 ^\p{Digit}+$처럼 시작(^)과 끝($) 앵커를 함께 사용하면 됩니다. 이는 \d와 기능적으로 동일하지만, POSIX 표기법을 사용한다는 점에서 코드의 의도를 더 명확하게 드러낼 수 있습니다.