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

时间:2018-06-13 18:38:27

标签: regex regex-group

给出以下文字(注意换行符):

 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的匹配,因为它之前的单个空格已经被匹配为第三个的非捕获组(?:)匹配:

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

我怎样才能获得qux quux

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

1 个答案:

答案 0 :(得分:2)

使用单词边界,这可以满足您的需求。像这样:

\b(foo|qux quux)\b

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

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

很好地写出了字边界是什么:https://www.regular-expressions.info/wordboundaries.html