Similarquestionshavebeen問,但沒有人回答這個問題。是否可以創建一個正則表達式來匹配包含一個單詞而不是另一個單詞的行?
鑑於這種代表性的文字:
foo
bar
foo bar
bar foo
foo bar foo
bar foo bar
是否可以使用正則表達式匹配只有那些包含單詞foo
,但不包含單詞bar
線?
如果需要的正則表達式是在上面的文字運行時,它只會導致:
foo
Similarquestionshavebeen問,但沒有人回答這個問題。是否可以創建一個正則表達式來匹配包含一個單詞而不是另一個單詞的行?
鑑於這種代表性的文字:
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
在正則表達式是一個word boundary。
Vim的版本:
^\(.*\<bar\>\)\@!.*\<foo\>.*
是。使用lookarounds。
/^.*(?<!\bbar\b.*)\bfoo\b(?!.*\bar\b).*$/
+1 - 這是一個比我更好的解決方案。 – 2012-07-10 19:51:19
任何人都想成爲我的英雄,並以'vim'接受的形式呈現這個正則表達式? – 2012-07-10 19:57:17
@CoryKlein - 用Vim版本編輯我的答案。 – 2012-07-10 20:01:42