\ b与我认为匹配的东西不匹配

时间:2014-05-20 15:15:40

标签: java regex

我正在使用Java正则表达式匹配“dept”。在字符串“dept.no.2”中,并且不使用以下正则表达式“\ b(dept \。)\ b”取回任何匹配项。

我的理解是\ b会匹配空格,因为它们不是单词字符,但它似乎没有这样做。当我将\ s *添加到正则表达式时,如下面的“\ b(dept \。)\ s * \ b”我得到一个成功的匹配。

我阅读原始正则表达式的方式是匹配部门。 (在文字句点之间)在单词边界之间。这不正确吗?

我在这里做什么/失踪是什么蠢事?

1 个答案:

答案 0 :(得分:3)

\b符合以下内容:(^\w|\w\W|\W\w|\w$)

换句话说,非单词字符旁边的单词字符([a-zA-Z0-9_])(或字符串的开头/结尾)。您目前正在尝试使用\.\b来匹配“。”;句点将匹配,但后面没有单词边界(因为它是两个非单词字符)。

这就是为什么你可以添加\s*并且它会起作用的原因,因为现在单词边界将匹配“n”之间的空格。我建议你只使用表达式\b(dept\.),因为\.几乎与你的方案中的\b同义(t一个单词字符,后跟\. a非单词字符)。