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}과 같은 다른 패턴을 고려하는 것이 좋습니다.