在两场比赛之间使用非捕获组?
Using a non-capturing group between two matches?
给定以下文本(注意换行符):
foo bar foo5 bar foo-bar foo qux quux\n foo
我希望获得 foo
和 qux 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
?
注意:我知道在 foo
和 qux quux
之间插入 2 个空格会使我的正则表达式工作,但这很愚蠢。
使用单词边界,这就是您要查找的内容。像这样:
\b(foo|qux quux)\b
这里有一个你可以玩的小例子:
https://regex101.com/r/oYeixv/1
关于什么是单词边界的精彩描述:https://www.regular-expressions.info/wordboundaries.html
给定以下文本(注意换行符):
foo bar foo5 bar foo-bar foo qux quux\n foo
我希望获得 foo
和 qux 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
?
注意:我知道在 foo
和 qux quux
之间插入 2 个空格会使我的正则表达式工作,但这很愚蠢。
使用单词边界,这就是您要查找的内容。像这样:
\b(foo|qux quux)\b
这里有一个你可以玩的小例子:
https://regex101.com/r/oYeixv/1
关于什么是单词边界的精彩描述:https://www.regular-expressions.info/wordboundaries.html