我正在为Java中的unicode文本编写正则表达式。但是对于我使用的特定脚本 - Devanagari(0900 - 097F),字边界存在问题。 \ b匹配依赖元音的字符(如093E-094C),因为它们被视为空格字符。
实施例: 假设我有字符串:“कमलकमालकम्हलकम्हाल” 请注意,第二个单词中的'मा'是通过组合म和ा(被识别为空格字符)形成的。同样在最后一个字。 这导致\ b匹配'कमाल'中的'ल'与正则表达式\ b \ w \ b,根据语言不正确。
我希望这个例子有所帮助。
我可以写一个行为类似于\ b的正则表达式,除了它与某些字符不匹配吗?任何反馈都将不胜感激。
答案 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]
”是您的集合“单词字符”
答案 1 :(得分:1)
字边界的等价物(如果边界不是你期望的那样)将是:
(?<!=[x-y])(<?=[x-y])...(?<=[x-y])(?![x-y])
这是因为“字边界”的意思是“一边有字符而另一边没有字符的地方”
因此,使用look-behind和look-ahead表达式,您可以定义自己的字符类[x-y]以检查何时要隔离“单词边界”