かなり基本的な質問です。Vimで正規表現を作成して、"abc "
直接で始まり、その後に。以外のフレーズが続くすべてのフレーズに一致させようとしてい"defg"
ます。
私は"[^defg]"
、d、e、f、またはg以外の任意の1文字に一致するために使用しました。
私の最初の本能は試してみることでしたが、/abc [^\(defg\)]
どちら/abc [^\<defg\>]
もうまくいきませんでした。
これが検索文字列です。
/abc \(defg\)\@!
探している概念は、否定先読みアサーションと呼ばれます。詳細については、vimでこれを試してください:
:help \@!
前または後に続く?
「abc」で始まり、(すぐに)「defg」が続かないものであれば、bmdhacks のソリューションが必要です。
'defg' が (直前に) 先行していない 'abc ' で始まるものである場合は、否定的な後読みが必要です。
/\%(defg\)\@<!abc /
これは、'defgabc' の一部でない限り、'abc' の出現と一致します。詳細については、を参照:help \@<!
してください。
「defg.*abc」の一部でない限り「abc」と一致させたい場合は、次のように追加し.*
ます。
/\%(defg.*\)\@<!abc /
'defg' が出現しない行でのみ 'abc ' を一致させることも同様です。
/\%(defg.*\)\@<!abc \%(.*defg\)\@!/
ただし、置換のためにこれを行っているだけの場合は、 と を組み合わせること:v//
で簡単にすることができます:s//
:%v/defg/s/abc /<whatever>/g
これにより、'defg' を含まないすべての行で 'abc' が '<whatever>' に置き換えられます。詳細については、を参照:help :v
してください。
ほら、これは毛深いものです:
/\%(\%(.\{-}\)\@<=XXXXXX\zs\)*
(XXXXXX を検索ワードに置き換えます)。これにより、XXXXXX を含まないすべてが検索されます。あなたがしたと思います:
/abc \%(\%(.\{-}\)\@<=defg\zs\)*
これは、あなたが望むように機能するかもしれません。これが少し役立つことを願っています!
/abc\ [^d][^e][^f][^g]
より大きな単語の場合はかなり面倒ですが、魅力のように機能します。