是否可以创建一个正则表达式来匹配包含一个单词但不包含另一个单词的行?

时间:2012-07-10 19:40:00

标签: regex

Similar questions have been问了,但没有人回答这个具体问题。

鉴于此代表性文字:

foo
bar
foo bar
bar foo
foo bar foo
bar foo bar

是否可以使用正则表达式仅匹配包含单词foo但不包含单词bar的行?

如果在上述文本上运行了所需的正则表达式,则只会产生:

foo

2 个答案:

答案 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

正则表达式中的

\bword boundary

Vim版本:

^\(.*\<bar\>\)\@!.*\<foo\>.*

答案 1 :(得分:0)

是。使用外观。

/^.*(?<!\bbar\b.*)\bfoo\b(?!.*\bar\b).*$/