答案 0 :(得分:3)
答案 1 :(得分:1)
Tomalak钉它 - 它是关于字边界匹配。我已经弄明白了并删除了这个问题,但威尔建议保持开放给其他人是合理的。
\b
实际上是罪魁祸首。
一个结论可能是除了最基本的(即ASCII)之外的任何东西,来自Java的内置便利表达式实际上是无用的。例如。 \w
仅匹配ASCII字符,\b
基于该字符,等等。
FWIW,我的RegExp结束了:
(?:^|[\p{P}\p{Z}])(\QThe $earch Term\E)(?:[\p{P}\p{Z}]|$)
其中The $earch Term
是我要匹配的文字。
\p{}
是Unicode类别。基本上,我打破了标点符号(P
)或分隔符(Z
)Unicode字符类别中的任何字符。同样,输入的开始和结束都是受到尊重的(使用^
和$
),并且边界标记在实际搜索时被标记为非捕获组((?:...)
位)术语引用\Q
和\E
&放在匹配的组中。