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

자바 정규식 POSIX 문자 클래스 \p{Lower} 완벽 정리

\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()와 반복문을 조합하면 문자열 내 소문자의 위치를 찾거나 개수를 세는 것도 가능합니다. 대소문자 검증이 필요한 폼 유효성 검사, 데이터 클렌징, 텍스트 분석 등 실무에서 폭넓게 응용해 보시기 바랍니다.