2

さて、テキスト エディター (崇高なテキスト) を使用して、正規表現モードで検索と置換を実行しようとしています。['some_text'] に変換する必要がある [some_text] を含む複数のファイルに何百もの文字列があります。以下は、後に引用符なしで開始ブラケットを一致させて置き換えるために機能します。

find:      \[(?!')
replace:   ['

ただし、前に引用符のない閉じ括弧を見つけるための同じロジックは、前に引用符があるものであっても、すべての閉じ括弧に一致するようです。何か案は?

find:      (?!')\]
replace:   ']
4

1 に答える 1

2

2 番目のケースでは、先読みの代わりに後読みを使用する必要があります。

find:      (?<!')\]
replace:   ']

その理由は、先読み(?!...)が正規表現エンジンの現在の位置の右側を参照するためです。したがって、 a に一致させ、その前で先読みを実行したい場合、正規表現エンジンは、(もちろん) ではないそれ自体]に対してそれをチェックします。]'

一方、後読みは、正規表現エンジンの現在の位置の左側に見えます。これはまさにあなたが望むものです。

どちらの場合も、ルックアラウンドは文字を消費しないことに注意してください! それらをチェックしても、正規表現エンジンの位置は進みません。これが、ルックアラウンドの方向が関連する理由です。

ルックアラウンドと正規表現エンジンの内部に関する詳細については、こちらを参照してください

(ちなみに、通常はエスケープする必要はありません]。開始がなければ[、メタ文字と間違われることはありません。)

于 2012-10-24T23:50:27.793 に答える