我正在尝试搜索包含一组单词的任何排列的行(不区分大小写)。例如,如果我对fooand感兴趣bar,我想匹配前四行,而不是下面的最后四行file:
Foo and bar.
Bar and foo.
The foo and the bar.
The bar and the foo.
Foobar.
Barfoo.
The foobar.
The barfoo.
看过这篇文章后,我意识到我可以在以下位置构建类似的东西perl:
perl -n -e 'print if (/\bfoo\b.*?\bbar\b/i || /\bbar\b.*?\bfoo\b/i)' file
仅正确匹配前四行。或者,使用本文建议的前瞻结构,可以使用更简洁的代码进行匹配:
perl -n -e 'print if (/(?=.*\bfoo\b)(?=.*\bbar\b)/i)' file
但是,我无法弄清楚如何用vim正则表达式语法编写这些,我发现它比perl正则表达式语法更加拜占庭式。我在vim使用搜索功能(/或?)时尝试了许多不同的表达式,但没有一个能产生成功的匹配。我意识到,而不是使用的(?=string)语法perl,vim使用\(string\)\@=和string\&。
然而,各种尝试,例如:
\c\(foo\)\@=\(bar\)@=\c\(foo\)\@=\.*\(bar\)@=\cfoo\&bar\&
(where\c用于不区分大小写的匹配)都失败了。
有人可以演示正确的vim语法吗?