0

閉じ括弧または閉じ括弧以外のすべてに一致する正規表現を探しています。基本的には、次のようなものです。

[^])]

ただし、閉じ括弧はコレクションを閉じるため、そのような式は機能しないと思います。あれは正しいですか?vim のエスケープ システムが正規表現でどのように機能するかについて少し混乱しているので、よくわかりません。

4

2 に答える 2

1

試してみましたか?それは機能するからです。ドキュメントを作成する:

test[test]test
test(test)test

次に実行

:%s/[^])]//g

そして、あなたは残ります

]
)

(使ってるけどset magic、YMMV)

編集: ではset nomagic\[^])]動作します。

これはこれに限定されませんvim。たとえば、Ruby は同じことを行います。重要なのは、閉じ括弧をクラスの最初の文字にすることです。その理論的根拠は、少なくとも 1 つの文字を入れたくない場合は文字クラスを開かないため、閉じ括弧が最初にある場合 (オプションの否定演算子の後) に一致させることができるためです。

同様に、キャレットに一致するに^は、最初の文字であってはならず、ダッシュに一致するには-、最初または最後でなければなりません (]最初の場所を取得する にも一致させたい場合は、最後にする必要があります)。

于 2012-12-28T06:20:56.380 に答える
0

はい、「\」でエスケープする必要があります。

[^\])]

編集:この場合は明らかに必要ではありません...そして、「\」を「)」の前に置いてもエスケープされませんが、一致しない文字に「\」が追加されます。私はまだ「]」をエスケープしますが...

編集 2 : vim のドキュメントでこのケースがカバーされています。

リテラル ']'、'^'、'-' または '\' をコレクションに含めるには、その前にバックスラッシュを置きます: "[xyz\]]"、"[\^xyz]"、"[xy\- z]」および「[xyz\\]」。(注: POSIX は、このようなバックスラッシュの使用をサポートしていません)。']' については、最初の文字にすることもできます (可能であれば "^" に続きます): "[]xyz]" または "[^]xyz]" {Vi にはありません}。

于 2012-12-28T06:20:35.620 に答える