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 の [クイック置換] ダイアログ ボックスで [すべて置換] を選択すると、選択したテキストから繰り返しの単語が削除されます。
ヒント
[クイック置換] ダイアログ ボックスで、[正規表現を使用] ボタンを選択するか、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 の [クイック置換] ダイアログ ボックスで [すべて置換] を選択すると、テキストから繰り返しの単語が削除されます。
ヒント
[クイック置換] ダイアログ ボックスで、[正規表現を使用する] ボタンを選択してください (または [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# 整数宣言と一致し、アクセス レベル、const や static などの修飾子、識別子、定義された値など、さまざまな部分をキャプチャします。 空白文字が少なくとも 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++ ソース ファイル内に一致が含まれます。 |
関連コンテンツ
- クイック リファレンス: 正規表現言語
- テキスト を検索して置換する