-
12-09-2019 - |
题
我写在Java中Unicode文本的正则表达式。但是对于我使用的是特定的脚本 - 梵文(0900 - 撒马利亚语)有一个与字边界问题。 \ B中它们象空格字符匹配处理是依赖元音(如093E-094C)字符。
实施例: 假设我有字符串:“कमलकमालकम्हलकम्हाल” 需要注意的是在第二个字“मा”是通过组合म和ा(识别为空格字符)形成。同样,在最后一个字。 这导致\ b键匹配“कमाल”的“ल”与正则表达式\ B \瓦特\ b根据语言这是不正确的。
希望的示例帮助。
我可以写一个正则表达式的行为类似\ b不同之处在于它不匹配某些字符?任何反馈将不胜感激。
解决方案
您应该能够完成你想要的用以下的正则表达式运算符:
(?=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]
”是你的“单词字符”
其他提示
word边界的等效(如果界限不正是您期望的)将是:
(?<!=[x-y])(<?=[x-y])...(?<=[x-y])(?![x-y])
这是因为一个“字边界”是指“其中存在一个字符在一侧,而不是上的位置的其他)
因此,与向后看和前瞻的表达式,您可以定义自己的类字符[X-Y]来检查时,要隔离一个“单词边界”
不隶属于 StackOverflow