给出以下文字(注意换行符):
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
的匹配,因为它之前的单个空格已经被匹配为第三个的非捕获组(?:
)匹配:
...
Match 3
Full match: " foo "
Group 1 : "foo"
...
我怎样才能获得qux quux
?
注意:我了解通过在foo
和qux quux
之间插入2个空格会使我的正则表达式工作,但这很愚蠢。
答案 0 :(得分:2)
使用单词边界,这可以满足您的需求。像这样:
\b(foo|qux quux)\b
这是一个你可以玩的小例子:
https://regex101.com/r/oYeixv/1
很好地写出了字边界是什么:https://www.regular-expressions.info/wordboundaries.html