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