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

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

POSIX 문자 클래스 \p{Alpha}는 대문자와 소문자를 모두 포함한 알파벳 문자와 일치하는 Java 정규식 패턴입니다. 즉, A~Z 및 a~z 범위의 모든 영문자를 매칭할 수 있으며, 숫자나 특수문자는 제외됩니다.

예제 1: 알파벳으로만 구성된 문자열 찾기

다음 예제에서는 사용자로부터 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{Alpha}+$";
      
      // 사용자 입력 받기
      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
sample
243test
##$$@
222356
알파벳으로만 구성된 문자열:
hello
sample

위 결과에서 볼 수 있듯이, 243test, ##$$@, 222356은 숫자나 특수문자가 포함되어 있어 정규식 조건에 맞지 않으므로 출력되지 않았습니다.

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

두 번째 예제는 입력된 문자열에서 알파벳 문자가 몇 개인지 세어주는 프로그램입니다.

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

public class Example {
   public static void main(String args[]) {
      // 사용자로부터 문자열 입력받기
      System.out.println("문자열을 입력하세요");
      Scanner sc = new Scanner(System.in);
      String input = sc.nextLine();
      
      // 정규식 정의
      String regex = "[\\p{Alpha}]";
      
      // 정규식 컴파일
      Pattern pattern = Pattern.compile(regex);
      
      // Matcher 객체 생성
      Matcher matcher = pattern.matcher(input);
      int count = 0;
      while (matcher.find()) {
         count++;
      }
      System.out.println("알파벳 문자 개수: " + count);
   }
}

실행 결과

문자열을 입력하세요
sample text
알파벳 문자 개수: 10

입력값 sample text에는 총 10개의 알파벳 문자(s, a, m, p, l, e, t, e, x, t)가 포함되어 있으며, 공백은 알파벳에 해당하지 않으므로 개수에서 제외됩니다.

정리

  • \p{Alpha}: 대소문자를 포함한 모든 영문 알파벳 한 글자와 일치
  • ^[\\p{Alpha}]+$: 문자열 전체가 알파벳으로만 구성되었는지 검사
  • [\\p{Alpha}]: 문자열 내에서 알파벳 문자 하나씩 추출하거나 개수 계산

POSIX 문자 클래스는 ASCII 범위의 문자만 다루므로, 유니코드 기반의 다국어 처리가 필요하다면 \\p{IsAlphabetic}과 같은 다른 패턴을 고려하는 것이 좋습니다.