次の方法で共有


Visual Studio で正規表現を使用する

Visual Studio では、.NET 正規表現 を使用してテキストを検索および置換します。

正規表現の構文

次の表に、正規表現の文字、演算子、コンストラクト、パターンの例をいくつか示します。 詳細なリファレンスについては、「正規表現言語 参照してください。

目的 表現
(改行を除く) 任意の 1 文字に一致します。 詳しくは、「任意の文字」をご覧ください。 . a.o は、"around" の中の "aro" および "about" の中の "abo" とは一致しますが、"across" の中の "acro" とは一致しません
直前の正規表現の 0 回以上の繰り返しに一致します (一致する文字列の長さを最大限にします)。 詳しくは、「0 回以上の繰り返しに一致」をご覧ください。 * a*r は、"rack" の中の "r"、"ark" の中の "ar"、"aardvark" の中の "aar" に一致します
0 回以上の任意の文字に一致します。 .* c.*e は、"racket" の中の "cke"、"comment" の中の "comme"、"code" の中の "code" に一致します
直前の正規表現の 1 回以上の繰り返しに一致します (一致する文字列の長さを最大限にします)。 詳しくは、「1 回以上の繰り返しに一致」をご覧ください。 + e+d は、"feeder" の中の "eed"、"faded" の中の "ed" に一致します
文字列の任意の文字を1回以上一致させます。 .+ e.+e は "feeder" の "eede" と一致しますが、"feed" には一致が見つかりません。
直前の正規表現の 0 回以上の繰り返しに一致します (一致する文字列の長さを最小限にします)。 詳しくは、「0 回以上の繰り返しに一致 (最短一致)」をご覧ください。 *? \w*?d は、"faded" の中の "fad" と "ed" とは一致しますが、最短一致のため "faded" の文字全体とは一致しません
直前の正規表現の 1 回以上の繰り返しを検索します (一致する文字列の長さを最小限にします)。 詳しくは、「1 回以上の繰り返しに一致 (最短一致)」をご覧ください。 +? e\w+? は、"asleep" の中の "ee"、"faded" の中の "ed" とは一致しますが、"fade" には一致しません
一致文字列を、行頭または文字列の先頭に固定します ^ ^car は、"car" という単語が行の先頭に表示される場合にのみ一致します
一致文字列を行 の末尾に固定する \r?$ car\r?$ は、行の末尾に表示される場合にのみ "car" と一致します
一致文字列をファイルの末尾に固定する $ car$ は、ファイルの末尾に表示される場合にのみ "car" と一致します
セット内の任意の 1 文字と一致します [abc] b[abc] は、"ba"、"bb"、および "bc" と一致します
範囲内の任意の文字に一致します [a-f] be[n-t] は、"between" の中の "bet"、"beneath" の中の "ben"、"beside" の中の "bes" とは一致しますが、"below" には一致しません
かっこ内に含まれる式をキャプチャして暗黙的に番号を付けます () ([a-z])X\1 は "aXa" と "bXb" と一致しますが、"aXb" には一致しません。 "\1" は、最初の式グループ "[a-z]" を参照します。 詳細については、「キャプチャ グループと置換パターンの」を参照してください。
マッチを無効にする (?!abc) real(?!ity) は、"realty" と "really" の "real" には一致しますが、"reality" の場合は一致しません。また、"realityreal" の (1 つ目の "real" ではなく) 2 つ目の "real" とも一致します。
指定された文字セットに含まれていない文字を対象とします。 詳細については、「負の文字グループ を参照してください。 [^abc] be[^n-t] は、"before" の中の "bef"、"behind" の中の "beh"、"below" の中の "bel" とは一致しますが、"beneath" とは一致しません
シンボルの前または後の式のいずれかと一致します | (sponge|mud) bath は「スポンジ風呂」と「泥風呂」に一致します
バックスラッシュの後の文字をエスケープ処理します \ \^ は文字 ^ と一致します。
前の文字またはグループの出現回数を指定します。 詳しくは、「n 回の繰り返しに一致」をご覧ください。 {n}。ここで、'n' は出現回数です x(ab){2}x は "xababx" と一致します
x(ab){2,3}x は "xababx" と "xabababx" と一致しますが、"xababababx" には一致しません
Unicodeカテゴリ内のテキストを一致させる。 Unicode 文字クラスの詳細については、「Unicode 標準 15.0 文字プロパティを参照してください。 \p{X}。ここで、"X" は Unicode 番号です。 \p{Lu} は、"Thomas Doe" の "T" と "D" と一致します
ワード境界に一致します \b (文字クラス \b の外部では単語の境界を指定し、文字クラス内ではバックスペースを指定 \b)。 \bin は、"inside" の中の "in" とは一致しますが、"pinto" には一致しません
改行と一致する (つまり、キャリッジ リターンの後に続く新しい行、または新しい行のみ) \r?\n End\r?\nBegin は、"End" が行の最後の文字列であり、"Begin" が次の行の最初の文字列である場合にのみ、"End" と "Begin" と一致します
単語に使用される任意の文字と一致します \w a\wd は "add" と "a1d" と一致しますが、"a d" には一致しません
任意の空白文字と一致します \s "パブリック インターフェイス" という語句と一致する Public\sInterface
任意の 10 進数字と一致します \d \d は、"wd40" の "4" と "0" と一致します

一部の演算子とコンストラクトを組み合わせて 16 進数に一致させる正規表現の例は、\b0[xX]([0-9a-fA-F]+)\bです。 この式は "0xc67f" と一致しますが、"0xc67g" とは一致しません。

ヒント

Windows オペレーティング システムでは、ほとんどの行は "\r\n" で終わる (キャリッジ リターンの後に新しい行が続く)。 これらの文字は表示されませんが、エディターに存在し、.NET 正規表現サービスに渡されます。 Web または Windows 以外のオペレーティング システムからファイルを処理する場合は、改行にのみ新しい行が使用される可能性を考慮してください。

グループと置換パターンをキャプチャする

キャプチャ グループは、正規表現の部分式を示し、入力文字列の部分文字列をキャプチャします。 キャプチャされたグループは、正規表現自体内で (たとえば、繰り返し単語を検索する場合)、または置換パターンで使用できます。 詳細については、正規表現 でのグループ化コンストラクトのを参照してください。

番号付きキャプチャ グループを作成するには、正規表現パターンで部分式をかっこで囲みます。 キャプチャは、正規表現内の開始かっこの位置に基づいて、左から右に自動的に番号が付けられます。 キャプチャしたグループにアクセスするには、次の例を検討してください。

  • 正規表現内: \number を使用します。 たとえば、正規表現 (\w+)\s\1\1 は、最初のキャプチャ グループ (\w+)を参照します。

  • 置換パターン内: $number を使用します。 たとえば、グループ化された正規表現 (\d)([a-z]) では、2 つのグループが定義されます。最初のグループには 1 つの 10 進数字が含まれており、2 番目のグループには、zの間に 1 つの文字 含まれます。 式は、次の文字列で 4 つの一致を検索します。1a 2b 3c 4d。 置換文字列 z$1 は、最初のグループ ($1) のみを参照し、文字列を z1 z2 z3 z4 に変換します。

次の図は、正規表現の (\w+)\s\1 と置換文字列の $1を示しています。 正規表現と置換パターンの両方が、自動的に 1 の番号が付いた最初のキャプチャ グループを参照します。 Visual Studio の [クイック置換] ダイアログ ボックスで [すべて置換] を選択すると、選択したテキストから繰り返しの単語が削除されます。

Visual Studio の番号付きキャプチャ グループを示すクイック 置換のスクリーンショット。

ヒント

[クイック置換] ダイアログ ボックスで、[正規表現を使用] ボタンを選択するか、Alt +Eを押します。

名前付きキャプチャ グループ

キャプチャ グループの自動番号付けではなく、名前を付けることができます。 名前付きキャプチャ グループの構文は (?<name>subexpression)

名前付きキャプチャ グループは、番号付きキャプチャ グループと同様に、正規表現自体内または置換パターンで使用できます。 名前付きキャプチャ グループにアクセスするには、次の例を検討してください。

  • 正規表現内: \k<name> を使用します。 たとえば、正規表現 (?<repeated>\w+)\s\k<repeated> 内の \k<repeated> は、repeated という名前で部分式が \w+されているキャプチャ グループを参照します。

  • の置換パターンでを用いるには、${name}を使用します。 たとえば、${repeated}します。

次の図は、正規表現の (?<repeated>\w+)\s\k<repeated> と置換文字列の ${repeated}を示しています。 正規表現と置換パターンの両方が、repeatedという名前のキャプチャ グループを参照します。 Visual Studio の [クイック置換] ダイアログ ボックスで [すべて置換] を選択すると、テキストから繰り返しの単語が削除されます。

Visual Studio の名前付きキャプチャ グループを示すクイック置換機能のスクリーンショット。

ヒント

[クイック置換] ダイアログ ボックスで、[正規表現を使用する] ボタンを選択してください (または [Alt+E] を押してください)。

名前付きキャプチャ グループの詳細については、「名前付き一致部分式」を参照してください。 置換パターンで使用される正規表現の詳細については、「正規表現 置換」を参照してください。

例文

パターン 説明
int ([_A-Za-z][_A-Za-z0-9]*) 1 つの整数定義と一致します。 識別子は 1 つの大文字または小文字で始まり、その後に 0 個以上 (*で示される) 文字または数字が続きます。 識別子は外側のかっこによって $1 としてキャプチャされます。
(private|internal|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ 整数リテラルに初期化される C# 整数宣言と一致し、アクセス レベル、conststaticなどの修飾子、識別子、定義された値など、さまざまな部分をキャプチャします。 空白文字が少なくとも 1 つ存在する場合は \s+ を使用し、空白が発生する可能性があるかどうかわからない場合は \s* を使用します。
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) foreach ループの開始行と一致します。 リテラルかっこはバックスラッシュ (\) でエスケープされます。 エスケープされていない括弧によって、さまざまなグループは $1$2、および $3 としてキャプチャされます。
#define\s+([_A-Za-z][_A-Za-z0-9]*) #define 定義と一致します (値がない場合)。 定義されたトークンは、$1に格納されます。
#include\s+["<](.*)[">] C++ ソース ファイル内に一致が含まれます。