1

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

示例:假设我有字符串:“कमल कमाल कम्हल कम्हाल” 请注意,第二个单词中的“मा”是由 म 和 ा(识别为空格字符)组合而成。最后一句话也是如此。这导致 \b 将 'कमाल' 中的 'ल' 与正则表达式 \b\w\b 匹配,根据语言,这不正确。

我希望这个例子有帮助。

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

4

2 回答 2

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 文档。)

使用(?<![foo])(?=[foo])代替\b单词之前, (?<=[foo])(?![foo])代替\b单词之后,其中“ [foo]”是您的“单词字符”集

于 2009-09-22T06:26:58.630 回答
1

单词边界的等效项(如果边界不是您所期望的)将是:

 (?<!=[x-y])(<?=[x-y])...(?<=[x-y])(?![x-y])

那是因为“单词边界”的意思是“一侧有字符而另一侧没有字符的位置)

因此,使用后视和前瞻表达式,您可以定义自己的字符类 [xy] 以检查何时要隔离“单词边界”

于 2009-09-22T06:27:12.620 回答