47

かなり基本的な質問です。Vimで正規表現を作成して、"abc "直接で始まり、その後に。以外のフレーズが続くすべてのフレーズに一致させようとしてい"defg"ます。

私は"[^defg]"、d、e、f、またはg以外の任意の1文字に一致するために使用しました。

私の最初の本能は試してみることでしたが、/abc [^\(defg\)]どちら/abc [^\<defg\>]もうまくいきませんでした。

4

4 に答える 4

59

これが検索文字列です。

/abc \(defg\)\@!

探している概念は、否定先読みアサーションと呼ばれます。詳細については、vimでこれを試してください:

:help \@!
于 2008-09-18T21:09:43.087 に答える
18

前または後に続く?

「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してください。

于 2008-09-19T03:00:46.957 に答える
0

ほら、これは毛深いものです:

/\%(\%(.\{-}\)\@<=XXXXXX\zs\)*

(XXXXXX を検索ワードに置き換えます)。これにより、XXXXXX を含まないすべてが検索されます。あなたがしたと思います:

/abc \%(\%(.\{-}\)\@<=defg\zs\)*

これは、あなたが望むように機能するかもしれません。これが少し役立つことを願っています!

于 2008-09-18T21:03:51.417 に答える
-4

/abc\ [^d][^e][^f][^g]

より大きな単語の場合はかなり面倒ですが、魅力のように機能します。

于 2008-09-18T21:06:16.310 に答える