less
を使用して、.phpが後に続かない「index」のすべてのインスタンスをログで検索したい。 /index(?!\.php)
は機能しません。これは可能ですか? lessおよびvimの正規表現とは何ですか(それらは異なりますか?)。これは、これらのアプリケーションのそれぞれの正規表現ライブラリでは不可能ですか?
vim
では、次のようにすることができます。
/index\(\.php\)\@!
詳細については、コマンドモードで:h \@
を試してください。
\@! Matches with zero width if the preceding atom does NOT match at the
current position. /zero-width {not in Vi}
Like '(?!pattern)" in Perl.
Example matches
foo\(bar\)\@! any "foo" not followed by "bar"
a.\{-}p\@! "a", "ap", "aap", "app", etc. not immediately
followed by a "p"
if \(\(then\)\@!.\)*$ "if " not followed by "then"
_(?!\.php)
_はPerlの正規表現演算子です。 less
は通常、システムのPOSIX正規表現APIを使用するため、通常GNU拡張正規表現GNUシステム、vim
はvim
正規表現。
vim
では、すでにcuonglmで示されているように、index(?!\.php)
と同等のものはindex\(\.php\)\@!
または\vindex(\.php)@!
になります。
less
の場合、コンパイル時に正規表現ライブラリ/ APIを選択でき、その結果、使用する正規表現タイプを選択できます。
_--with-regex={auto,gnu,pcre,posix,regcmp,re_comp, regcomp,regcomp-local,none} Select a regular expression library auto
_
ただし、デフォルトでは、less
はREG_EXTENDEDでPOSIX regcomp
を使用するため、システムの拡張正規表現を取得するため、通常、_grep -E
_と同じようなものになります。
GNU拡張正規表現では、同等の先読み演算子または先読み演算子はありません。
あなたはそれを難しい方法で行うことができます:
_index($|[^.]|\.($|([^p]|p($|([^h]|h($|[^p]))))))
_
less
を使用すると、_&
_キーを使用して、_index.php
_(_&!index\.php
_)を含む行を除外し、index
(_/index
_)。 (_index.php
_も含む行に表示されるindex
の他のインスタンスを見逃してしまいます).