3

有人问类似的问题 ,但没有人回答这个具体问题。

鉴于此代表性文本:

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

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

如果在上面的文本上运行这个所需的正则表达式,它只会导致:

foo
4

2 回答 2

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在正则表达式中是一个单词边界

Vim 版本:

^\(.*\<bar\>\)\@!.*\<foo\>.*
于 2012-07-10T19:48:36.080 回答
0

是的。使用环视。

/^.*(?<!\bbar\b.*)\bfoo\b(?!.*\bar\b).*$/
于 2012-07-10T19:45:39.140 回答