我写在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]来检查时,要隔离一个“单词边界”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top