Similar questions have been问了,但没有人回答这个具体问题。
鉴于此代表性文字:
foo
bar
foo bar
bar foo
foo bar foo
bar foo bar
是否可以使用正则表达式仅匹配包含单词foo
但不包含单词bar
的行?
如果在上述文本上运行了所需的正则表达式,则只会产生:
foo
答案 0 :(得分:10)
这是一种相当简单的方法:
^(?!.*\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
是word boundary。
Vim版本:
^\(.*\<bar\>\)\@!.*\<foo\>.*
答案 1 :(得分:0)
是。使用外观。
/^.*(?<!\bbar\b.*)\bfoo\b(?!.*\bar\b).*$/