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

Java 정규식으로 문자 범위를 일치시키는 방법 총정리

문자 클래스(Character Class)로 문자 범위 매칭하기

Java 정규식에서 특정 두 문자 사이의 모든 문자를 일치시키고 싶다면, 즉 일련의 문자 중 지정된 범위에 속한 문자들을 찾고 싶다면 문자 클래스(character class)를 사용하면 됩니다.

[a-z]

대괄호 안에 하이픈(-)으로 시작 문자와 끝 문자를 연결해 표기하면 해당 범위에 포함된 모든 문자와 일치합니다.

주요 활용 예시

  • [a-zA-Z] — 영어 알파벳 대소문자 전체(모든 영문자)를 허용합니다.
  • [0-9&&[^35]] — 숫자 0~9 중에서 3과 5를 제외한 나머지 숫자만 허용합니다. &&는 교집합(intersection) 연산으로, 두 조건을 동시에 만족하는 문자만 매칭됩니다.

예제 1: 알파벳과 숫자로만 구성된 문자열 검증하기

아래 예제는 입력받은 문자열이 영문자와 숫자로만 이루어져 있는지 정규식 ^[a-zA-Z0-9]*$로 검사합니다.

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("Enter a String");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        String regex = "^[a-zA-Z0-9]*$";

        // 정규식 컴파일
        Pattern pattern = Pattern.compile(regex);

        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(input);

        if(matcher.matches()) {
            System.out.println("Match occurred");
        } else {
            System.out.println("Match not occurred");
        }
    }
}

실행 결과 1

Enter a String
Hello
Match occurred

입력값이 'Hello'처럼 알파벳만 포함하고 있으므로 정규식 패턴과 일치하여 매칭에 성공했습니다.

실행 결과 2

Enter a String
sample#
Match not occurred

입력값 'sample#'에는 알파벳과 숫자 외의 특수문자 '#'가 포함되어 있으므로 매칭에 실패합니다.

예제 2: 특정 숫자를 제외한 숫자 세기

이번 예제에서는 정규식 [0-9&&[^35]]를 사용해 입력 문자열에서 3과 5를 제외한 숫자가 몇 번 등장하는지 세어봅니다.

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("Enter a String");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        String regex = "[0-9&&[^35]]";

        // 정규식 컴파일
        Pattern pattern = Pattern.compile(regex);

        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(input);

        int count = 0;
        while(matcher.find()) {
            count++;
        }
        System.out.println("Occurrences :"+count);
    }
}

실행 결과

Enter a String
111223333555689
Occurrences :8

입력값 '111223333555689'에서 3은 네 개, 5는 세 개로 총 7개를 제외하면 나머지 숫자(1×3개, 2×2개, 6, 8, 9)는 8개입니다. 따라서 결과가 'Occurrences :8'로 출력되는 것을 확인할 수 있습니다.

정리

  • 문자 클래스 [시작-끝] 형태로 문자 범위를 지정할 수 있습니다.
  • 여러 범위를 합쳐 쓰면([a-zA-Z0-9]) 대소문자 알파벳과 숫자를 한 번에 처리할 수 있습니다.
  • && 연산자와 ^ 기호를 조합하면([0-9&&[^35]]) 특정 문자를 제외한 교집합 매칭도 가능합니다.