\p{Lower}는 자바 정규식에서 제공하는 POSIX 문자 클래스 중 하나로, 소문자 알파벳 a부터 z까지의 문자와 일치합니다. 입력값 검증이나 특정 패턴 추출 등 다양한 상황에서 유용하게 활용할 수 있으며, 대소문자를 구분해야 하는 로직을 간결하게 처리할 수 있다는 장점이 있습니다.
예제 1: 소문자로만 이루어진 문자열 걸러내기
다음 예제는 정규식 ^\p{Lower}+$을 사용하여 사용자가 입력한 5개의 문자열 중 오직 소문자로만 구성된 문자열만 골라 출력하는 프로그램입니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Posix_LowerExample {
public static void main( String args[] ) {
// 소문자와 일치하는 정규식
String regex = "^\\p{Lower}+$";
// 입력 데이터 받기
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개의 문자열을 입력하세요: Raju RAMU rahman radha SUnDar* 소문자로만 구성된 문자열: rahman radha
정규식 앞뒤에 붙은 ^(시작)와 + 기호 덕분에 문자열 전체가 소문자로 이루어진 경우에만 일치합니다. 따라서 'Raju', 'RAMU', 'SUnDar*'처럼 대문자나 특수 문자가 섞인 입력은 모두 제외되고, 'rahman'과 'radha'만 출력됩니다.
예제 2: 문자열에 포함된 소문자 개수 세기
두 번째 예제는 \p{Lower}와 find() 메서드를 조합하여, 입력받은 문자열 안에 소문자가 몇 개 들어 있는지 계산하는 프로그램입니다.
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{Lower}";
// 정규식 컴파일
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 얻기
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
count++;
}
System.out.println("입력한 문자열의 소문자 개수: "+count);
}
}
실행 결과 1
문자열을 입력하세요 Hello How Are You 입력한 문자열의 소문자 개수: 10
실행 결과 2
문자열을 입력하세요 WELCOME TO TUTORIALSPOINT 입력한 문자열의 소문자 개수: 0
'Hello How Are You'에는 소문자가 총 10개('e', 'l', 'l', 'o', 'o', 'w', 'r', 'e', 'o', 'u') 포함되어 있어 10이 출력되고, 모두 대문자로 작성된 두 번째 입력에서는 소문자가 없으므로 0이 출력됩니다.
정리
\p{Lower}는 단순하지만 강력한 POSIX 문자 클래스입니다. matches()와 함께 사용하면 문자열 전체가 소문자인지 검증할 수 있고, find()와 반복문을 조합하면 문자열 내 소문자의 위치를 찾거나 개수를 세는 것도 가능합니다. 대소문자 검증이 필요한 폼 유효성 검사, 데이터 클렌징, 텍스트 분석 등 실무에서 폭넓게 응용해 보시기 바랍니다.