\ b的正则表达式

时间:2009-09-22 06:18:35

标签: regex unicode word-boundary word-boundaries

我正在为Java中的unicode文本编写正则表达式。但是对于我使用的特定脚本 - Devanagari(0900 - 097F),字边界存在问题。 \ b匹配依赖元音的字符(如093E-094C),因为它们被视为空格字符。

实施例: 假设我有字符串:“कमलकमालकम्हलकम्हाल” 请注意,第二个单词中的'मा'是通过组合म和ा(被识别为空格字符)形成的。同样在最后一个字。 这导致\ b匹配'कमाल'中的'ल'与正则表达式\ b \ w \ b,根据语言不正确。

我希望这个例子有所帮助。

我可以写一个行为类似于\ b的正则表达式,除了它与某些字符不匹配吗?任何反馈都将不胜感激。

2 个答案:

答案 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]以检查何时要隔离“单词边界”