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

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

POSIX 문자 클래스 \p{Alnum}은 영숫자(alphanumeric) 문자, 즉 알파벳 대소문자와 숫자(0~9)에 해당하는 문자와 일치합니다. 정규식에서 특정 패턴이 영숫자인지 판별해야 할 때 유용하게 사용됩니다.

예제 1: 영숫자 문자 개수 세기

다음 예제는 사용자로부터 문자열을 입력받은 후, \p{Alnum}을 이용해 문자열 내 영숫자 문자의 개수를 세는 프로그램입니다.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class AlphanumericExample {
    public static void main(String args[]) {
        // 사용자로부터 문자열 입력 받기
        System.out.println("문자열을 입력하세요");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        // 정규식: 영숫자 한 글자와 일치
        String regex = "[\\p{Alnum}]";

        // 정규식 컴파일
        Pattern pattern = Pattern.compile(regex);

        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(input);

        int count = 0;
        while(matcher.find()) {
            count++;
        }
        System.out.println("영숫자 문자의 개수: " + count);
    }
}

실행 결과 1

문자열을 입력하세요
sample 123
영숫자 문자의 개수: 9

입력된 문자열 "sample 123"에는 알파벳 6글자와 숫자 3개, 총 9개의 영숫자 문자가 포함되어 있으므로 결과는 9가 출력됩니다.

실행 결과 2

문자열을 입력하세요
@$#%&&#*
영숫자 문자의 개수: 0

반면 특수문자만으로 구성된 문자열은 영숫자 문자가 하나도 없기 때문에 결과는 0이 됩니다.

예제 2: 영숫자로만 구성된 문자열 걸러내기

다음 예제는 5개의 문자열을 입력받아, 오직 영숫자로만 구성된 문자열만 골라 출력하는 프로그램입니다. 여기서는 앵커(^, $)와 수량자(+)를 함께 사용하여 문자열 전체가 영숫자인지 검사합니다.

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{Alnum}+$";

        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]);
            if(m.matches()) {
                System.out.println(m.group());
            }
        }
    }
}

실행 결과

5개의 문자열을 입력하세요:
hello
1234
243test
##$$@
***
영숫자로만 구성된 문자열:
hello
1234
243test

실행 결과를 보면 "hello", "1234", "243test"처럼 알파벳과 숫자로만 이루어진 문자열만 출력되고, 특수문자가 포함된 "##$$@"와 "***"는 제외된 것을 확인할 수 있습니다.

정리

  • \p{Alnum}은 알파벳(A-Z, a-z)과 숫자(0-9)와 일치하는 POSIX 문자 클래스입니다.
  • 단일 문자 검사 시에는 [\p{Alnum}] 형태로, 문자열 전체 검사 시에는 ^\p{Alnum}+$ 형태로 활용할 수 있습니다.
  • Matcher.find()를 반복 호출하면 패턴에 일치하는 모든 문자를 찾을 수 있고, matches()는 문자열 전체가 패턴과 일치하는지 확인합니다.