想象一下,你正在尝试模式匹配“stackoverflow”。
您需要以下内容:
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]
我知道如果在两个站点上都有空格,使用:
解析stackoverflow/\s(stackoverflow)\s/
与它在字符串的开头或结尾处相同:
/^(stackoverflow)\s/
/\s(stackoverflow)$/
但是如何使用正则表达式指定“空格或字符串结尾”和“空格或字符串的开头”?
答案 0 :(得分:142)
您可以使用以下任何一项:
\b #A word break and will work for both spaces and end of lines.
(^|\s) #the | means or. () is a capturing group.
/\b(stackoverflow)\b/
此外,如果您不想在匹配中包含空格,则可以使用lookbehind / aheads。
(?<=\s|^) #to look behind the match
(stackoverflow) #the string you want. () optional
(?=\s|$) #to look ahead.
答案 1 :(得分:53)
(^|\s)
将匹配空格或字符串的开头,($|\s)
表示空格或字符串结尾。它是:
(^|\s)stackoverflow($|\s)
答案 2 :(得分:13)
以下是我要使用的内容:
(?<!\S)stackoverflow(?!\S)
换句话说,匹配“stackoverflow”,如果它不是前面的非空白字符,而不是跟随非空白字符。
这比“空间或锚点”方法更整洁(IMO),并且它不假设字符串以\b
方法的单词字符开头和结尾。
答案 3 :(得分:7)
\b
匹配单词边界(没有实际匹配任何字符),因此以下内容应该符合您的要求:
\bstackoverflow\b