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

Java 정규식 [^...] 구문 완벽 가이드

Java 정규식에서 하위 표현식이자 메타문자인 [^...]는 대괄호 안에 포함되지 않은 임의의 단일 문자와 일치시키는 역할을 합니다. 즉, 대괄호 내부에 나열된 문자들을 제외한 모든 문자를 매칭 대상으로 삼는 부정 문자 클래스(negated character class)입니다.

예제 1: 특정 문자를 제외한 문자 세기

다음 예제에서는 입력 문자열에서 'h', 'w', 't', 'y', 'o', 'u', 'p', 'i'에 해당하지 않는 문자가 몇 개 있는지 세어 봅니다.

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SpecifiedCharacters {
    public static void main( String args[] ) {
        String regex = "[^hwtyoupi]";
        String input = "Hi how are you welcome to Tutorialspoint";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        int count = 0;
        while(m.find()) {
            count++;
        }
        System.out.println("매칭된 문자 수: "+count);
    }
}

실행 결과

매칭된 문자 수: 21

예제 2: 영문 알파벳이 포함되지 않은 문자열 찾기

아래 Java 프로그램은 사용자로부터 5개의 문자열을 입력받은 후, 그중 영문 알파벳(a~z, A~Z)을 하나도 포함하지 않는 문자열만 골라 출력합니다. 정규식 ^.*[^a-zA-Z].*$는 전체 문자열 중 최소 한 글자 이상이 알파벳이 아닌 경우에 매칭됩니다.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
    public static void main( String args[] ) {
        String regex = "^.*[^a-zA-Z].*$";
        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.find()) {
                System.out.println(m.group());
            }
        }
    }
}

실행 결과

5개의 입력 문자열을 입력하세요:
1234*5
*&%
sample
test
data23
영문 알파벳을 포함하지 않는 문자열:
1234*5
*&%

핵심 정리

[^...] 구문은 대괄호 안의 문자 집합을 부정하는 방식으로 동작하며, 데이터 유효성 검사나 특정 문자 필터링 등 다양한 상황에서 유용하게 활용할 수 있습니다. 위 예제처럼 숫자나 특수문자만으로 구성된 입력값을 걸러내는 작업에도 손쉽게 적용할 수 있습니다.