単語のグループの順列を含む行を検索しようとしています(大文字と小文字を区別しない)。たとえば、単語foo
とに興味がある場合bar
は、次の最初の4行は一致させますが、最後の4行は一致させません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
これは最初の4行だけに正しく一致します。または、この投稿で提案されている先読み構造を使用して、もう少し簡潔なコードで照合を行うことができます。
perl -n -e 'print if (/(?=.*\bfoo\b)(?=.*\bbar\b)/i)' file
ただし、これらを正規表現構文で記述する方法を理解することはできません。正規表現構文vim
よりもはるかにビザンチンであることがわかりperl
ます。vim
検索関数(/
または)を使用してさまざまな式を試しまし?
たが、どれも一致しませんでした。、uses 、およびで(?=string)
使用される構文の代わりに、私は気づきました。perl
vim
\(string\)\@=
string\&
ただし、さまざまな試みがあります。例:
\c\(foo\)\@=\(bar\)@=
\c\(foo\)\@=\.*\(bar\)@=
\cfoo\&bar\&
(\c
大文字と小文字を区別しない一致に使用される場合)はすべて失敗しました。
誰かが正しいvim
構文を示してもらえますか?