如果我有一个句子,并且希望在一个特定单词之前显示一个单词或所有单词,例如,我想在fox brown之后显示单词The quick brown fox jumps over the lazy dog,我知道我可以积极看待(?<=brown\s)(\w+)但是我不太理解实例(?<=\bbrown\s)(\w+)中\ b的使用。我正在使用http://gskinner.com/RegExr/作为测试仪。

最佳答案

\b是带断言的零。这意味着它与一个字符不匹配,它与一个位置匹配,一个位置在左侧,另一个在右侧。

单词边界\b在从\w(单词字符)到\W非单词字符或从\W\w的更改上匹配

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

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

\bbrown\s


将在这里匹配

The quick brown fox
         ^^


但不在这里

The quick bbbbrown fox


因为在b和brown之间没有单词边界,即从非单词字符到单词字符都没有变化,所以两个字符都包含在\w中。

如果您的正则表达式出现在\b上,则继续进行下一个字符,即b从棕色开始。现在\b知道右侧的含义,单词char ==> b。但是现在需要回头,以使\b变为TRUE,在b之前必须有一个非文字字符。如果有空格(不在\w中),则\b之前的b为true。但是如果还有另一个b,则其为false,然后\bbrown与“ bbrown”不匹配

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

有关更多详细信息,请参见此处www.regular-expressions.info

关于regex -\b在使用正则表达式时如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7605198/

10-10 03:41