web-dev-qa-db-ja.com

正規表現検索でワイルドカードを置き換えるにはどうすればよいですか?

私が持っているスクリプト内のすべての変数型宣言をコメントアウトしようとしていますが、この問題に何度か遭遇しました。文字列、変数名、文字列を照合し、正確なテキストを置き換えますが、2番目の文字列の前に一重引用符を付けます。

例えば:

Dim variableName As Boolean
Dim variableName2 As String

次のようになります。

Dim variableName 'As Boolean
Dim variableName2 'As String

ここで問題となるのは、コードの他の場所に置換してはならない「As」文字列もあるため、単純な検索/置換が機能しないことです。

NotePad ++を使用していて、宣言に正しく一致する次の正規表現があります。

Dim.*As

しかし、置換フィールドの.*の代わりに何を入力すればよいかわかりません。 Dim.*'Asは、明らかにワイルドカード文字列をリテラル.*に置き換えますが、これは適切ではありません。

何か案は?

4
DACrosby

RegExの「キャプチャグループ」を使用して、キャプチャして保持するセクションを指定し、残りを置き換えることができます。

Notepad ++では、キャプチャグループは角かっこ((および))で表され、\1\2、などの表記を使用して、コンテンツを「置換」に入れることができます。追加したキャプチャグループごとに(出現順に)など。

したがって、検索の正規表現を(Dim.*)(As)に変更します。これにより、元の検索と同じように検索されますが、2つのキャプチャグループが作成されます。 'を挿入する場所の前と後。

これに対して、以前と同様にDim variableName As Booleanが見つかり、2つのキャプチャグループにはDim variableNameAs Booleanが含まれます。

Notepad ++のReplaceフィールドには、\1'\2を使用します。これにより、一致したテキストが最初のキャプチャグループ、次に'、次に2番目のキャプチャグループに置き換えられます。

置換を実行すると、Dim variableName As BooleanDim variableName 'As Boolean(など)になります。

8

これは、後読みと先読みで行うことができます。例:検索:

(?<=Dim)(.*?)(?=As)

と置換する:

\1'

これはあなたがやろうとしていることをするはずです。置換の「\ 1」は「Dim」と「As」の間のテキストと一致し、コメントを追加できます。

編集

テスト後の補足として、これはすべて置換でのみ機能します

1
Caraxian