ano*_*one 115 regex preg-match
成像您正在尝试模式匹配"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]
Run Code Online (Sandbox Code Playgroud)
我知道如果解析stackoverflow如果它在两个站点上都有空格使用:
/\s(stackoverflow)\s/
Run Code Online (Sandbox Code Playgroud)
如果它在字符串的开头或结尾处是相同的:
/^(stackoverflow)\s/
/\s(stackoverflow)$/
Run Code Online (Sandbox Code Playgroud)
但是如何指定"空格或字符串结尾"和"空格或字符串的开头"?
Jac*_*ers 151
您可以使用以下任何一种方法:
\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/
Run Code Online (Sandbox Code Playgroud)
此外,如果您不想在匹配中包含空格,则可以使用lookbehind/aheads.
(?<=\s|^) #to look behind the match
(stackoverflow) #the string you want. () optional
(?=\s|$) #to look ahead.
Run Code Online (Sandbox Code Playgroud)
gor*_*rdy 58
(^|\s)将匹配空格或字符串的开头以及($|\s)空格或字符串结尾.它是:
(^|\s)stackoverflow($|\s)
Run Code Online (Sandbox Code Playgroud)
Ala*_*ore 14
这是我会用的:
(?<!\S)stackoverflow(?!\S)
Run Code Online (Sandbox Code Playgroud)
换句话说,匹配"stackoverflow"(如果它之前没有非空白字符,并且后面没有非空白字符).
这比"空间或锚点"方法更整洁(IMO),并且它不假设字符串以类似于\b方法的字符开头和结尾.