鉴于此代表性文本:
foo
bar
foo bar
bar foo
foo bar foo
bar foo bar
是否可以使用正则表达式仅匹配包含该单词foo
但不包含该单词的行bar
?
如果在上面的文本上运行这个所需的正则表达式,它只会导致:
foo
这是一种相当简单的方法:
^(?!.*\bbar\b).*\bfoo\b.*
解释:
^ # starting at beginning of the string
(?! # fail if (negative lookahead)
.*\bbar\b # the word 'bar' exists anywhere in the string
) # end negative lookahead
.*\bfoo\b.* # match the line with the word 'foo' anywhere in the string
rubular:http ://www.rubular.com/r/pLeqGQUXbj
\b
在正则表达式中是一个单词边界。
Vim 版本:
^\(.*\<bar\>\)\@!.*\<foo\>.*
是的。使用环视。
/^.*(?<!\bbar\b.*)\bfoo\b(?!.*\bar\b).*$/