2011-09-22 3 views
0

내가하는 프로젝트에서 String을 읽어야합니다. 이 문자열에는 유니 코드 문자에 대한 하나 이상의 16 진수 표현이 포함될 수 있습니다 (예 : "š"의 경우 "\ u0161"). 이 코드를 올바른 문자 표현으로 변환하고 싶습니다.정규 표현식의 첫 문자가 다른 문자와 잘 작동하면 오류가 발생합니다.

이렇게하려면 내가 먼저 내 문자열의 형식 "\ uAAAA"의 진수 순서가 있음을 감지해야하고, 그 때문에 나는 다음과 같은 정규 표현식 썼다 :

Pattern classPattern = Pattern.compile("\\u[0-9a-fA-F]{4}"); 
Matcher classMatcher = classPattern.matcher("\\u1ECD"); 
System.out.println(classMatcher.find()); 

불행하게도 이것은 생성을 "java.util.regex.PatternSyntaxException : 색인 2 근처에 잘못된 유니 코드 이스케이프 문자열이 있습니다."오류가 발생합니다. 이것은 내가 다시 뭔가 잘못하고있는 중이 야 믿고 날 리드

Pattern classPattern = Pattern.compile("@u[0-9a-fA-F]{4}"); 
Matcher classMatcher = classPattern.matcher("@u1ECD"); 
System.out.println(classMatcher.find()); 

: 내가 "@"로 단지 테스트 목적으로 "\"를 대체하는 경우

그러나, 정규식은 예상대로 작동 삭감. 다른 시퀀스도 많이 시도했지만 그 중 아무 것도 작동하지 않았습니다. 도와주세요.

답변

3

'\ u'는 Java 정규식 세계에서 특별한 의미가 있습니다. 즉, 실제 유니 코드 문자와 일치해야합니다. 원하는 일치를 얻으려면 \을 두 번 탈출해야합니다. 의견이 지적한 것처럼

Pattern classPattern = Pattern.compile("\\\\u[0-9a-fA-F]{4}"); 

[업데이트], 정답을주는 나의 추론 결함이었다.

+0

이 작품! 감사! – jerraes

+1

다음과 같은 'u'또는 '\ u'와는 아무런 관련이 없습니다. 리터럴 백 슬래시를 정규 표현식으로 코딩하려면 백 슬래시가 두 번 이스케이프 처리되므로 Java 리터럴 문자열에 4 개의 백 슬래시가 필요합니다. 정규식. – Bohemian

+0

이것은 실제로 잘못된 이유로 올바른 것을 추천 한 예입니다. – Ingo

관련 문제