如何指定“空格或string的结尾”和“空格或string的开始”?

您正在尝试模式匹配“成像stream”的成像。

你需要以下内容:

this is stackoverflow and it rocks [MATCH] stackoverflow is the best [MATCH] i love stackoverflow [MATCH] typostackoverflow rules [NO MATCH] i love stackoverflowtypo [NO MATCH] 

我知道如何parsing出如果它有两个网站上的空间使用的stackoverflow:

 /\s(statckoverflow)\s/ 

如果它在string的开头或结尾,也是一样的:

 /^(stackoverflow)\s/ /\s(stackoverflow)$/ 

但是,如何指定“空格或string的结尾”和“空格或string的开始”?

您可以使用以下任何一项:

 \b #A word break and will work for both spaces and end of lines. (^|\s) #the | means or. () is a caputuring group. /\b(stackoverflow)\b/ 

此外,如果您不想在比赛中包含空间,则可以使用后视/前进。

 (?<=\s|^) #to look behind the match (stackoverflow) #the string you want. () optional (?=\s|$) #to look ahead. 

(^|\s)会匹配空格或string的开始和($|\s)空格或string的结尾。 一起是:

 (^|\s)stackoverflow($|\s) 

这是我会用的:

  (?<!\S)stackoverflow(?!\S) 

换句话说,匹配“stackoverflow”如果它不是前面有一个非空白字符,并没有跟随一个非空白字符。

这比国际海事组织(IMO)要好一些,而不是像“空间或锚”这样的方法。

\b在字边界匹配(没有真正匹配任何字符),所以下面应该做你想要的:

 \bstackoverflow\b