我正在嘗試搜索包含任何一組字詞(不區分大小寫)的排列的行。例如,如果我感興趣的話foo
和bar
,我想前四線,但在以下file
不是最後四行匹配:vi中包含字符串集合的任意排列的匹配行
Foo and bar.
Bar and foo.
The foo and the bar.
The bar and the foo.
Foobar.
Barfoo.
The foobar.
The barfoo.
說完看着this post,我意識到我可以構建perl
是這樣的:
perl -n -e 'print if (/\bfoo\b.*?\bbar\b/i || /\bbar\b.*?\bfoo\b/i)' file
它正確只匹配第一個四行。另外,使用由this post建議先行構建,比賽可以用稍微更簡潔的代碼做:
perl -n -e 'print if (/(?=.*\bfoo\b)(?=.*\bbar\b)/i)' file
我不能,但是,弄清楚如何在vim
正則表達式語法寫這些,我覺得這比perl
正則表達式的語法要遠得多拜占庭式。我使用搜索功能(/
或?
)在vim
中嘗試了許多不同的表達式,但沒有一個產生成功匹配。我意識到,代替perl
使用的(?=string)
語法,vim
使用\(string\)\@=
和string\&
。
然而,各種嘗試,例如:
\c\(foo\)\@=\(bar\)@=
\c\(foo\)\@=\.*\(bar\)@=
\cfoo\&bar\&
(其中\c
用於不區分大小寫匹配)已經全部不成功。
有人能請示範正確的vim
語法嗎?
謝謝,這兩個匹配正確,每行只有一次。 – user001 2012-08-07 18:21:05