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

자바 정규 표현식 문자 클래스 완벽 가이드 – 대괄호 [ ]로 원하는 문자 매칭하기

자바(Java) 정규 표현식에서 문자 클래스(Character Class)는 대괄호 [ ]를 사용해 정의합니다. 문자 클래스는 지정된 문자 집합 안에서 단 하나의 문자와 일치시키는 역할을 합니다.

예를 들어, 정규 표현식 [abc]는 'a', 'b', 'c' 중 어느 하나의 문자와 일치합니다. 마찬가지로 [a-z]는 알파벳 소문자 a부터 z 사이의 임의의 한 글자와 일치합니다.

문자 클래스의 기본 문법

  • [abc] – a, b, c 중 하나와 일치
  • [a-z] – 소문자 a부터 z까지 범위 내의 한 문자와 일치
  • [A-Za-z0-9] – 영문 대소문자 및 숫자 중 한 문자와 일치
  • [^a-z] – 대괄호 안 맨 앞에 캐럿(^)을 넣으면 부정(Negation)이 되어, 소문자 a~z를 제외한 나머지 문자와 일치

아래 두 가지 예제를 통해 문자 클래스를 실제로 어떻게 활용하는지 살펴보겠습니다.

예제 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("Enter input text: ");
        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("Number of characters from a to z: " + count);
    }
}

실행 결과

Enter input text:
sample data 1234$
Number of characters from a to z: 10

입력값 "sample data 1234$"에는 공백을 제외하면 s, a, m, p, l, e, d, a, t, a 등 총 10개의 소문자가 포함되어 있으므로 결과가 10으로 출력됩니다.

예제 2: 알파벳이 아닌 문자 개수 세기

이번에는 부정 문자 클래스인 [^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("Enter input text: ");
        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("Number of non-alphabetic characters : " + count);
    }
}

실행 결과

Enter input text:
sample data 1234$
Number of non-alphabetic characters : 7

입력값에서 숫자 1, 2, 3, 4와 기호 $, 그리고 두 개의 공백을 합쳐 총 7개의 비알파벳 문자가 발견됩니다.

정리

자바 정규 표현식의 문자 클래스는 Pattern.compile()로 패턴을 만들고, Matcher.find() 메서드를 반복 호출하며 일치하는 문자를 찾는 방식으로 활용합니다. 대괄호 안에 범위(-)나 부정(^)을 조합하면 숫자만 추출하거나, 특수문자 검증, 유효성 검사 등 다양한 문자열 처리 작업을 손쉽게 구현할 수 있습니다.