我正在使用Java正则表达式来匹配“部门”。在字符串“ dept。no。2”中,并且不会使用以下正则表达式“ \ b(dept \。)\ b”返回任何匹配项。
我的理解是\ b可以匹配空格,因为它们不是单词字符,但似乎没有这样做。当我按照以下“ \ b(dept \。)\ s * \ b”向正则表达式添加\ s *时,我得到了成功的匹配。
我阅读原始正则表达式的方式是比赛部门。 (带字面量)在字边界之间。这不是正确的读法吗?
我在这里没有/错过什么愚蠢的事情?
最佳答案
\b
与以下内容匹配:(^\w|\w\W|\W\w|\w$)
。
换句话说,在非单词字符(或字符串的开头/结尾)之后的单词字符([a-zA-Z0-9_]
)。您当前正在尝试使用\.\b
匹配“。”;该时间段将匹配,但不跟随单词边界(因为它是两个非单词字符)。
这就是为什么您可以添加\s*
并起作用的原因,因为现在单词边界将匹配“ n”之间的空格。我建议您只使用表达式\b(dept\.)
,因为在您的方案中\.
与\b
几乎是同义词(t
是单词字符,然后是\.
是非单词字符)。