b에 대한 정규 표현
-
12-09-2019 - |
문제
Java에서 유니 코드 텍스트에 대한 정규 표현식을 작성하고 있습니다. 그러나 내가 사용하고있는 특정 스크립트의 경우 Devanagari (0900-097f) 단어 경계에 문제가 있습니다. b는 공간 문자처럼 취급 될 때 의존적 모음 (093E-094C와 같은)의 문자와 일치합니다.
예 : 내가 문자열을 가지고 있다고 가정합니다. 마지막 단어에서도 마찬가지입니다. 이것은 b가 'कम कम ल'의 'ल'와 일치하게하여 언어에 따라 정확하지 않은 정규 표현식 b w b와 일치하게됩니다.
그 예가 도움이되기를 바랍니다.
특정 숯과 일치하지 않는 것을 제외하고 b와 같은 행동을하는 정규 표현을 쓸 수 있습니까? 모든 피드백은 감사 할 것입니다.
해결책
다음 Regex 연산자와 함께 원하는 것을 달성 할 수 있어야합니다.
(?=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 패턴 API 문서.)
사용 (?<![foo])(?=[foo])
대신에 \b
한마디 전에 (?<=[foo])(?![foo])
대신에 \b
한 단어 후에 "어디에"[foo]
""단어 문자 "세트입니다.
다른 팁
단어 경계와 동일합니다 (경계가 당신이 기대했던 것이 아닌 경우)는 다음과 같습니다.
(?<!=[x-y])(<?=[x-y])...(?<=[x-y])(?![x-y])
"단어 경계"는 "한쪽에는 캐릭터가 있고 다른쪽에는 아닌 위치를 의미하기 때문입니다).
따라서 외모와 외관 표현식을 사용하면 "Word 경계"를 분리하려는시기를 확인하기 위해 자신의 문자 클래스 [XY]를 정의 할 수 있습니다.
제휴하지 않습니다 StackOverflow