如果我有一个句子并希望在特定单词之前匹配之后显示一个单词或所有单词,例如我想显示单词fox后面brown The quick brown fox jumps over the lazy dog,我知道我可以看起来正面看后面(?<=brown\s)(\w+)但是我不喜欢我完全理解在实例中使用\ b (?<=\bbrown\s)(\w+).我使用http://gskinner.com/RegExr/作为我的测试人员.
ste*_*ema 20
\b断言是零.这意味着它与一个角色不匹配,它匹配左侧有一个东西而右侧有另一个东西的位置.
单词边界\b匹配从\w(单词字符)到\W非单词字符或从\W到的单词变化\w
包含哪些字符\w取决于您的语言.至少有所有ASCII字母,所有ASCII数字和下划线.如果您的正则表达式引擎支持unicode,则可能是所有字母和数字\w都包含unicode属性字母或数字.
\W是所有字符,不在\w.
\bbrown\s
Run Code Online (Sandbox Code Playgroud)
会在这里匹配
The quick brown fox
^^
Run Code Online (Sandbox Code Playgroud)
但不是这里
The quick bbbbrown fox
Run Code Online (Sandbox Code Playgroud)
因为b和brown之间没有单词边界,即从非单词字符到单词字符没有变化,所以两个字符都包括在内\w.
如果你的正则表达式发生了\b它继续下一个字符,那就是b褐色.现在\b知道右边是什么,单词char ==> the b.但是现在需要回顾一下,为了让它\b成为正确,需要在之前有一个非单词字符b.如果有一个空格(不存在\w),则\b前面的空格b为真.但如果有另一个b然后它的假,然后\bbrown不匹配"bbrown"
正则表达式brown将匹配两个字符串"快速棕色"和"bbrown",其中正则表达式\bbrown仅匹配"快速棕色"而不是"bbrown"
有关详细信息,请参阅www.regular-expressions.info
令牌\b有点特殊。它实际上与字符不匹配。它的作用是匹配位于单词边界的任何位置(在这种情况下,“单词”是匹配的任何位置\w)。因此,该模式(?<=brown\s)(\w+)将匹配“bbbbbrown Fox”,但(?<=\bbrown\s)(\w+)不会匹配,因为“bb”和“brown”之间的位置位于单词的中间,而不是其边界。