我知道\bword\B
在Java中使用正则表达式表现得像word\B
。 (就匹配引擎而言)
为什么会这样?如果它是异常(语法异常)会不会更合理?
此外,它也被this教程中的oracle用作解释性示例(\bdog\B
)。
如果您不知道答案,请不要随意回复。
提前谢谢。
答案 0 :(得分:2)
\B
是\b
的否定版本。 \B
匹配\b
没有的每个位置。实际上,\B
匹配两个单词字符之间的任何位置以及两个非单词字符之间的任何位置。
\b
允许您使用\bword\b
形式的正则表达式执行“仅限整个单词”搜索。 “单词字符”是可用于形成单词的字符。所有不是“单词字符”的字符都是“非单词字符”。在字母数字序列之前和之后更准确地说\b
匹配
<小时/> 以上来自here。
在\bdog\B
的示例中,它会与“doggie”匹配,因为您要求它匹配单词和部分单词。
\bdog\b
将因“狗狗”而失败,因为“狗”是整个单词而“doggie”中的“dog”是部分单词。
这取决于触摸的内容。
此外,dog\B
会在短语“我有小狗”中匹配“dog”
dog\b
会在“我有adog gie”这句话中匹配“dog”
dog\B
与“我有adog gie”这句话中的“dog”不匹配
\bdog\b
与“我有adog gie”这句话中的“dog”不匹配
但是\Bdog\b
会匹配“我有adog gie”这句话中的“dog”
此SO答案提供了detailed explanation。