Visual Studioで複数の行で正規表現の置換を実行する方法はありますか(行の境界を越えて一致させる)?これに使用できるエディターはたくさんありますが、この機能がVisual Studioに残されているのは奇妙に思えます。何か不足していますか?
ファイルの置換ダイアログを使用 Ctrl-Shift-H および単一行オプション(?s)
:
(?s)start.*end
見つける
start
two
three
end
単一行の意味:各ファイルは単一行として扱われ、ドット.
は改行\n
と一致します。欠点:Find Allを使用してすべてを置き換えるか、手動で置き換える必要があります。 [次を検索]が機能しません。
非モーダルダイアログの場合 Ctrl-H 次を見つけるには、(.*\n)*
を使用して任意の行数に一致させます。
start(.*\n)*.*end
いずれにしても、\n
を挿入することで、検出結果を複数行に置き換えることができます。
Visual Studio 2013で正規表現が変更されました。 https://msdn.Microsoft.com/en-us/library/2k3te2cs(v = vs.120).aspx
2行にわたって式を照合するためのコードは次のようになります。
StartOfExpression.*\r?\n.*EndOfExpression
これは、今日Visual Studio 2012で機能します。
_fooPatternToStart.*(.*\n)+?.*barPatternToEnd
_
_(.*\n)+?
_部分が欲張りでない複数行にわたってどのように一致するかを確認してください。fooPatternToStart
は開始行の正規表現パターンであり、barPatternToEnd
は下の別の行、おそらく下の多くの行で見つけるパターンです...
例が見つかりました here 。
シンプルで効果的:)
注意: 前 VS2012、機能したパターンは次のとおりでした:fooPatternToStart.(.\n)+@.*barPatternToEnd
注:この回答は、VS 2012までのVisual Studioで使用されている正規表現構文を使用しています。VS2013以降では、正規表現構文が変更されています。
式に\n
を含めることができます。例として、ストアドプロシージャではないものから自動生成されたSQLスクリプトを「クリーン」するために使用する正規表現を次に示します(「Object:」の後に行ではないものが続くテキストブロックに一致します) 「StoredProcedure」、次の行を「GO」という単語で構成される行に一致させる):
/\*+ Object\::b:b~(StoredProcedure)(.*\n)#GO\n
式の最後に\ r\nを使用する必要がある場合があります。