web-dev-qa-db-ja.com

Visual Studioの複数行の正規表現

Visual Studioで複数の行で正規表現の置換を実行する方法はありますか(行の境界を越えて一致させる)?これに使用できるエディターはたくさんありますが、この機能がVisual Studioに残されているのは奇妙に思えます。何か不足していますか?

76
Paul Keister

ファイルの置換ダイアログを使用 Ctrl-Shift-H および単一行オプション(?s)

(?s)start.*end

見つける

start
two
three
end

単一行の意味:各ファイルは単一行として扱われ、ドット.は改行\nと一致します。欠点:Find Allを使用してすべてを置き換えるか、手動で置き換える必要があります。 [次を検索]が機能しません。

非モーダルダイアログの場合 Ctrl-H 次を見つけるには、(.*\n)*を使用して任意の行数に一致させます。

start(.*\n)*.*end

いずれにしても、\nを挿入することで、検出結果を複数行に置き換えることができます。

15
Stephan Stamm

Visual Studio 2013で正規表現が変更されました。 https://msdn.Microsoft.com/en-us/library/2k3te2cs(v = vs.120).aspx

2行にわたって式を照合するためのコードは次のようになります。

StartOfExpression.*\r?\n.*EndOfExpression

66
Giles Roberts

これは、今日Visual Studio 2012で機能します。

_fooPatternToStart.*(.*\n)+?.*barPatternToEnd
_

_(.*\n)+?_部分が欲張りでない複数行にわたってどのように一致するかを確認してください。
fooPatternToStartは開始行の正規表現パターンであり、barPatternToEndは下の別の行、おそらく下の多くの行で見つけるパターンです...

例が見つかりました here

シンプルで効果的:)

注意:  VS2012、機能したパターンは次のとおりでした:fooPatternToStart.(.\n)+@.*barPatternToEnd

22
woohoo

注:この回答は、VS 2012までのVisual Studioで使用されている正規表現構文を使用しています。VS2013以降では、正規表現構文が変更されています。

式に\nを含めることができます。例として、ストアドプロシージャではないものから自動生成されたSQLスクリプトを「クリーン」するために使用する正規表現を次に示します(「Object:」の後に行ではないものが続くテキストブロックに一致します) 「StoredProcedure」、次の行を「GO」という単語で構成される行に一致させる):

/\*+ Object\::b:b~(StoredProcedure)(.*\n)#GO\n
19
Fredrik Mörk

式の最後に\ r\nを使用する必要がある場合があります。

3
Keng