在两场比赛之间使用非捕获组?

Using a non-capturing group between two matches?

给定以下文本(注意换行符):

 foo bar foo5 bar foo-bar foo qux quux\n foo

我希望获得 fooqux quux 的所有匹配项,希望在这些情况下出现在数字、字母或下划线旁边,即

foo bar foo5 bar foo-bar foo qux quux \n bar foo

使用以下正则表达式:

(?:\W)(foo|qux quux)(?:\W|$)

我找到了所有需要出现的 foo:

的匹配项

foo bar foo5 bar foo-bar foo qux quux\n bar foo

问题是我没有找到 qux quux 的匹配项,因为它前面的单个空格已经被匹配为第 3 个非捕获组 (?:)比赛:

 ...
 Match 3
   Full match: " foo "
   Group 1   : "foo"
 ...

我怎样才能同时获得qux quux

注意:我知道在 fooqux quux 之间插入 2 个空格会使我的正则表达式工作,但这很愚蠢。

使用单词边界,这就是您要查找的内容。像这样:

\b(foo|qux quux)\b

这里有一个你可以玩的小例子:

https://regex101.com/r/oYeixv/1

关于什么是单词边界的精彩描述:https://www.regular-expressions.info/wordboundaries.html