2009-09-22 6 views
1

Java에서 유니 코드 텍스트에 대한 정규식을 작성하고 있습니다. 그러나 내가 사용하고있는 특정 스크립트 (Deanagari (0900 - 097F))에는 단어 경계에 문제가 있습니다. \ b는 공백 문자처럼 취급되는 종속 모음 인 (093E-094C와 같은) 문자와 일치합니다. b에 대한 정규 표현식

예 : 가정하자 내가 문자열을 가지고 : "कमल कमाल कम्हल कम्हाल"2 단어 'मा'가 결합 म 및 ा (공백 문자로 인식)에 의해 형성되는 것이 참고. 마찬가지로 마지막 단어. 이것은 \ b가 'कमाल'의 'ल'를 정규 표현식 \ b \ w \ b와 일치하도록합니다.이 정규식은 언어에 따라 올바르지 않습니다.

예제가 도움이되기를 바랍니다.

특정 문자와 일치하지 않는다는 점을 제외하면 \ b와 (와) 같이 동작하는 일반 표현식을 작성할 수 있습니까? 모든 의견은 감사 할 것입니다.

+0

예제를 제공 할 수 있습니까? – Gumbo

+0

예를 추가했습니다. 나는 그것이 의미가 있기를 바랍니다. –

+0

[^] (범위 내에 있지 않음) 표현식을 사용하여 수행 할 수 있습니까? –

답변

1

다음과 같은 정규식 운영자와 당신이 원하는 것을 성취 할 수 있어야한다 :

(?=X) X, via zero-width positive lookahead 
(?!X) X, via zero-width negative lookahead 
(?<=X) X, via zero-width positive lookbehind 
(?<!X) X, via zero-width negative lookbehind 

가 (. 위의 Java 6 Pattern API docs에서 인용)

사용 (?<![foo])(?=[foo])\b 대신에 단어 앞에, 및 (?<=[foo])(?![foo]) 대신 \b 대신 "[foo]"을 "단어 문자"집합

+0

나는 그 일을하려고 생각했으나 http://www.regular-expressions.info/wordboundaries.html을 읽은 후에 생각했다. 제대로 작동한다면 혼란 스러웠다. –

1

단어 b에 해당하는 단어 (경계가없는 당신이 기대했던 어떤 경우) oundaries 다음과 같습니다는 "단어 경계"는 "한쪽에 문자가 아닌 다른 거기에있는 위치)

의미하기 때문이다

(?<!=[x-y])(<?=[x-y])...(?<=[x-y])(?![x-y]) 

역 슬리 이브 및 미리보기를 사용하면 "단어 경계"를 분리 할 때 자신의 클래스 [xy]를 정의하여 정의 할 수 있습니다.

+0

좋아, 이제 알았어. 너와 로렌스의 대답이 맞다. 내가 옳은 것으로 표시 하나? :디 –