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

Java 정규식 POSIX 문자 클래스 \p{IsAlphabetic} 활용법 총정리

POSIX 문자 클래스 \p{IsAlphabetic}란?

Java 정규식에서 \p{IsAlphabetic}는 알파벳 문자(문자 체계상 '문자'로 분류되는 글자)와 일치하는 POSIX 문자 클래스입니다. 이 클래스를 활용하면 입력 문자열에 포함된 영문자의 개수를 세거나, 알파벳이 포함된 문자열만 골라내는 등의 작업을 손쉽게 처리할 수 있습니다.

아래에서 두 가지 실전 예제를 통해 사용 방법을 살펴보겠습니다.

예제 1: 문자열 내 알파벳 문자 개수 세기

다음 예제는 사용자로부터 문자열을 입력받은 후, 정규식 \p{IsAlphabetic}을 이용해 문자열에 포함된 알파벳 문자의 개수를 계산합니다.

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

public class Example1 {
    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{IsAlphabetic}";

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

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

        int count = 0;
        while(matcher.find()) {
            count++;
        }
        System.out.println("Number of alphabetic characters: "+count);
    }
}

실행 결과

Enter a string
sample text
Number of alphabetic characters: 10

위 실행 결과를 보면 입력된 문자열 "sample text"에서 공백을 제외한 알파벳 문자가 총 10개로 카운트된 것을 확인할 수 있습니다.

예제 2: 알파벳이 포함된 문자열 필터링하기

두 번째 예제는 여러 개의 문자열 중에서 알파벳 문자를 하나 이상 포함하고 있는 문자열만 추려내는 프로그램입니다. 정규식 ^.*\p{IsAlphabetic}.*$를 사용하여 문자열 전체가 알파벳 문자를 포함하는지 검사합니다.

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

public class Example2 {
    public static void main(String args[]) {
        // 소문자 알파벳이 포함된 문자열과 일치시키기 위한 정규식
        String regex = "^.*\\p{IsAlphabetic}.*$";

        // 입력 데이터 받기
        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 alphabetic characters: ");
        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
sample
243test
##$$@
222356
Strings with alphabetic characters:
hello
sample
243test

결과 분석

실행 결과를 살펴보면 다음과 같습니다.

hello, sample — 전체가 알파벳으로 구성되어 있어 매칭됩니다.
243test — 숫자가 포함되어 있지만 알파벳도 함께 있으므로 매칭됩니다.
##$$@, 222356 — 특수문자나 숫자만 포함되어 알파벳이 없기 때문에 매칭되지 않고 제외됩니다.

이처럼 \p{IsAlphabetic} 문자 클래스를 활용하면 문자열 검증, 데이터 필터링, 입력값 유효성 검사 등 다양한 상황에서 유용하게 정규식을 응용할 수 있습니다.