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

예제로 배우는 Java Pattern의 UNICODE_CHARACTER_CLASS 필드


UNICODE_CHARACTER_CLASSjava.util.regex.Pattern 클래스가 제공하는 컴파일 플래그 중 하나로, 미리 정의된 문자 클래스(Predefined Character Classes)와 POSIX 문자 클래스의 유니코드 버전을 활성화합니다.

이 플래그를 적용하면 \d(숫자), \w(단어 문자), \s(공백 문자) 같은 기본 문자 클래스와 \p{Alpha} 같은 POSIX 문자 클래스가 US-ASCII 범위에 국한되지 않고, 유니코드 표준인 UTS #18 부록 C(호환성 속성)에 따라 동작합니다. 다만 이 옵션을 사용하면 약간의 성능 저하가 발생할 수 있다는 점도 참고하세요.

예제

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class UNICODE_CHARACTER_CLASS_Example {
    public static void main( String args[] ) {
        String regex = "\u00de";
        // 정규식 컴파일
        Pattern pattern = Pattern.compile(regex, Pattern.UNICODE_CHARACTER_CLASS);
        // Matcher 객체 생성 후 문자열 검사
        String str[] = {"\u00de", "\u00fe", "\u00ee", "\u00ce"};
        for (String ele : str) {
            Matcher matcher = pattern.matcher(ele);
            if(matcher.matches()) {
                System.out.println(ele+" is a match for "+regex);
            } else {
                System.out.println(ele+" is not a match for "+regex);
            }
        }
    }
}

이 예제는 문자 Þ(\u00DE)에 대한 정규식을 UNICODE_CHARACTER_CLASS 플래그와 함께 컴파일한 뒤, 네 개의 문자열이 각각 패턴과 일치하는지 여부를 검사합니다.

실행 결과

Þ is a match for Þ
þ is a match for Þ
î is not a match for Þ
Î is not a match for Þ

실행 결과를 보면 Þ(\u00DE)와 þ(\u00FE)는 패턴과 일치하지만, î(\u00EE)와 Î(\u00CE)는 일치하지 않습니다. 이처럼 UNICODE_CHARACTER_CLASS 플래그를 사용하면 ASCII에 한정된 기본 매칭 방식보다 유니코드 문자 체계를 반영한 더 정확하고 일관된 문자 매칭을 수행할 수 있습니다.