假设你正在尝试匹配模式 "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)$/
但是如何使用正则表达式来指定“空格或字符串结尾”以及“空格或字符串开头”?
\b
是一个零宽度断言,它不会消耗任何字符。不需要将其包裹在环视中。 - Alan Moore\b
仅支持 标准 ASCII 字符,也就是说,不支持 Unicode。如果您需要匹配 Unicode 单词,则只能使用此方法:https://dev59.com/rGw15IYBdhLWcg3wSJvQ#6713327。 - Mahn(?:^|\s)
。 - sam-6174(?<=\s|^)
替换为(?:(?<=\s)|(?<=^))
。否则,你会得到错误提示:error: look-behind requires fixed-width pattern
。 - sam-6174\b
会将其他字符如"."视为单词分隔符,然而提问者明确要求使用空格。@gordy 的解决方案看起来更好。 - Mikhail T.