使用正则表达式时\ b如何工作?

时间:2011-09-30 01:50:18

标签: regex

如果我有一个句子,并希望在特定单词之前匹配后显示单词或所有单词,例如我想在fox {brown之后显示单词The quick brown fox jumps over the lazy dog {1}},我知道我可以看看背后的正面看法,例如(?<=brown\s)(\w+)但我不太明白在实例(?<=\bbrown\s)(\w+)中使用\ b。我使用http://gskinner.com/RegExr/作为我的测试人员。

7 个答案:

答案 0 :(得分:15)

带有断言的

\b为零。这意味着它与一个角色不匹配,它匹配左侧有一个东西而右侧有另一个东西的位置。

单词边界\b匹配从\w(单词字符)到\W非单词字符,或从\W到{{1}的变化}}

\w中包含哪些字符取决于您的语言。至少有所有ASCII字母,所有ASCII数字和下划线。如果您的正则表达式引擎支持unicode,那么\w中的所有字母和数字都可能包含unicode属性字母或数字。

\w是所有字符,不在\W

\w

将匹配此处

\bbrown\s

但不在这里

The quick brown fox
         ^^

因为b和brown之间没有单词边界,即从非单词字符到单词字符没有变化,The quick bbbbrown fox 中都包含这两个字符。

如果你的正则表达式来到\w,它会转到下一个字符,那就是\b来自褐色。现在b知道右侧是什么,单词char ==&gt; \b。但现在它需要回顾一下,让b变为TRUE,在\b之前需要有一个非单词字符。如果有空格(不在b中),则\w之前的\b为真。但是如果有另一个b则其为假,然后b与“bbrown”不匹配

正则表达式\bbrown会匹配两个字符串“quick brown”和“bbrown”,其中正则表达式brown仅匹配“quick brown”而不是“bbrown”

有关详细信息,请参阅www.regular-expressions.info

答案 1 :(得分:2)

\b令牌很特别。它实际上与角色不匹配。它的作用是匹配位于单词边界的任何位置(在这种情况下,“单词”是匹配\w的任何内容)。因此模式(?<=brown\s)(\w+)将匹配“bbbbrown fox”,但(?<=\bbrown\s)(\w+)不匹配,因为“bb”和“brown”之间的位置位于单词的中间,而不是位于其边界。< / p>

答案 2 :(得分:1)

\ b保证褐色位于单词边界,有效排除

之类的模式

blackandbrown

答案 3 :(得分:1)

你不需要看后面,你可以简单地使用:

(\bbrown\s)(\w+)

答案 4 :(得分:1)

\ b是一个“单词边界”,是单词的开头或结尾之间的位置,然后是“非单词”字符。

它的主要用途是简化整个单词的选择,\bbrown\s将匹配:

^棕色  棕色 99brown _brown

它或多或少等同于“\ W *”,除非“捕获”字符串为“\ b”匹配单词的开头而不是单词之前或之后的非单词字符。

答案 5 :(得分:1)

\b是字边界的零宽度匹配。

开始 end 的单词,其中“word”定义为\w+

注意:“零宽度”表示\b是否在匹配的正则表达式内,它不会向该匹配捕获的文本添加任何字符。即匹配时的正则表达式\bfoo\b将仅捕获"foo" - 尽管\b对foo的匹配方式有所贡献(即整个单词),但它没有贡献任何字符。

答案 6 :(得分:0)

单词边界是一个位置,前面一个单词字符,后面一个,或后面一个单词字符而不是前面的一个。它等同于:

(?<=\w)(?!\w)|(?=\w)(?<!\w)

......或者它应该是。有关字边界的所有信息,请参阅this question。 ;)