かなり基本的な質問です。_"abc "
_で始まり、その後に_"defg"
_以外のフレーズが続くフレーズに一致するように、Vimで正規表現を書き込もうとしています。
_"[^defg]"
_を使用して、d、e、f、またはg以外の任意の1文字に一致させました。
私の最初の本能は/abc [^\(defg\)]
または_/abc [^\<defg\>]
_を試すことでしたが、どちらも機能しません。
これが検索文字列です。
/abc \(defg\)\@!
あなたが探している概念は、否定的な先読みアサーションと呼ばれます。詳細については、vimでこれを試してください:
:help \@!
前または後に?
'abc'で始まり、(すぐに)その後に 'defg'が続かないものであれば、 bmdhacks'solution が必要です。
'abc'で始まり、(すぐに) 'defg'が先行しないものである場合は、ネガティブな後読みが必要です。
/\%(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を含むnotを行うすべてのものを検索します。あなたがした場合、私は想像します:
/abc \%(\%(.\{-}\)\@<=defg\zs\)*
これはあなたが望むように働くかもしれません。これが少し役立つことを願っています!