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

Java 정규식 문자 클래스 범위(Range) 완벽 가이드

Java 정규식에서 문자 클래스(Character Class)는 대괄호 "[ ]"로 정의되며, 지정된 문자 집합 가운데 하나의 단일 문자와 일치하는 하위 표현식입니다. 예를 들어 정규식 [abc]는 문자 a, b, c 중 하나와 일치합니다.

문자 클래스의 범위(Range)

문자 클래스의 범위 변형을 사용하면 연속된 문자 구간을 한 번에 표현할 수 있습니다. 대괄호 안에서 하이픈(-)으로 시작 문자와 끝 문자를 연결하면 됩니다. 예를 들어 정규식 [a-z]는 알파벳 소문자 a부터 z까지 중 한 글자와 일치하고, [^A-Z]처럼 대괄호 맨 앞에 캐럿(^)을 붙이면 '대문자가 아닌 문자'와 일치합니다.

또한 [a-zA-Z0-9]처럼 여러 범위를 조합하거나 [0-9]로 숫자 범위를 지정할 수도 있습니다. 범위 표기법을 활용하면 모든 문자를 일일이 나열하지 않고도 간결하게 패턴을 작성할 수 있습니다.

예제 1: 소문자 범위(a-z) 개수 세기

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("텍스트를 입력하세요: ");
        String input = sc.nextLine();
        String regex = "[a-z]";
        // 패턴 객체 생성
        Pattern pattern = Pattern.compile(regex);
        // 컴파일된 패턴을 입력 문자열과 매칭
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while (matcher.find()) {
            count++;
        }
        System.out.println("(a-z) 범위에 해당하는 문자 수: " + count);
    }
}

이 프로그램은 입력받은 문자열에서 a~z 범위에 속하는 문자가 몇 개인지 세어 출력합니다.

실행 결과

텍스트를 입력하세요:
sample data 5423 #@ %*&
(a-z) 범위에 해당하는 문자 수: 10

입력값 "sample data 5423 #@ %*&"에는 소문자가 총 10개(s, a, m, p, l, e, d, a, t, a) 포함되어 있으므로 결과로 10이 출력됩니다.

예제 2: 대문자 제외([^A-Z]) 매칭 확인

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("텍스트를 입력하세요: ");
        String input = sc.nextLine();
        String regex = "[^A-Z]";
        // 패턴 객체 생성
        Pattern pattern = Pattern.compile(regex);
        // 컴파일된 패턴을 입력 문자열과 매칭
        Matcher matcher = pattern.matcher(input);
        if (matcher.find()) {
            System.out.println("매칭 발생");
        } else {
            System.out.println("매칭 없음");
        }
    }
}

[^A-Z] 패턴은 대문자를 제외한 모든 문자와 일치하며, find() 메서드로 매칭 여부를 확인합니다.

실행 결과 1

텍스트를 입력하세요:
sample data
매칭 발생

실행 결과 2

텍스트를 입력하세요:
SAMPLEDATA
매칭 없음

소문자로만 이루어진 "sample data"는 대문자가 아닌 문자를 포함하므로 매칭이 발생하지만, 전부 대문자인 "SAMPLEDATA"는 매칭되지 않습니다.