2009-05-27 4 views
2

우리는 단순히 정말 영어 이외의 문자를 지원하기 위해 고정되어야한다자바 정규식은 비 ASCII 값을 지원합니까?

String clean(String input) 
{ 
    return input==null?"":input.replaceAll("[^a-zA-Z ]",""); 
} 

이다 알파벳이나 공백없는 문자를 지 웁니다 현재의 방법이 (예를 들어, S, U, ...). 불행히도 자바 정규식 클래스 (예 : "\ W"- 단어가 아닌 문자 "\ p {Alpha}"- US-ASCII 전용})가이를 지원하지 않는 것 같습니다. 자바 정규 표현을 사용하여 수동으로 반복하지 않고 수동으로 테스트하는 방법이 있습니까?

답변

2

Java 6 패턴이 유니 코드를 처리합니다 (this doc 참조). Java 언어 사양의 §3.3에서 기술 된 바와 같이 자바 소스 코드 \하여 깔끔하게 같은

유니 코드 이스케이프 시퀀스 처리된다. 이러한 이스케이프 시퀀스는 정규 표현식 파서를 통해 으로 직접 구현되므로 파일이나 키보드에서 유니 코드 이스케이프 문자를 으로 사용할 수 있습니다. 따라서 문자열 "\ u2014"와 "\\ u2014"는 같지 않지만 은 같은 패턴으로 컴파일됩니다.이 패턴은 문자 과 16 진수 값 0x2014를 일치시킵니다.

유니 코드 블록 및 범주는 Perl과 마찬가지로 \ p 및 \ P 구조로 작성된 입니다. \입력에 속성 prop가있는 경우 \ p {prop}가 일치하고 입력 에 해당 속성이있는 경우 \ P {prop}이 일치하지 않습니다. 블록은 이며 접두사가 In으로 지정되어 있습니다 (예 : 인 몽골어). 범주는 이며 선택적 접두사로 지정 될 수 있습니다. \ p {L} 및 \ p {IsL}는 유니 코드 문자 범주를 나타냅니다. 블록 및 범주는 내부와 문자 클래스 외부에서 모두 사용할 수 있습니다.