Visual Studio での正規表現の使用

Visual Studio は、テキストの検索と置換をするときに、.NET Framework の正規表現を使用します。Visual Studio 2010 以前のバージョンでは、Visual Studio は [検索と置換] ウィンドウでカスタムの正規表現構文を使用していました。このトピックでは、より一般的なカスタム正規表現のシンボルのいくつかを、.NET バージョンに変換する方法を説明します。

ヒントヒント

Windows オペレーティング システムでは、ほとんどの行は、"\r\n" (キャリッジ リターンと、それに続く新しい行) で終わります。これらの文字は表示されませんが、エディターの中に存在し、.NET の正規表現のサービスに渡されます。

詳細については、「.NET Framework の正規表現」を参照してください。

ヒントヒント

置換パターンでよく使用される正規表現の詳細については、"正規表現での置換 (置換)" を参照してください。番号付きのキャプチャ グループを使用する場合の構文は、番号付きグループを指定する $1 と、該当のグループを指定する (x) です。たとえば、グループ化正規表現 (\d)([a-z]) を使用すると、次の文字列の中で、4 つの一致が見つかります。1a 3c 2b 4d。置換文字列 z$1 を使用すると、この文字列は z1 z2 z3 z4> に変換されます。Visual Studio 2010 でこれに相当する構文は、グループ化正規表現を表す {:z}([a-z]) と、置換文字列を表す z\1 です。

.NET Framework の正規表現の比較

次の表を使用して、Visual Studio の以前のバージョンで使用されていた正規表現を、.NET Framework の正規表現に変換できます。

目的

新規

以前

新規の例

(改行を除く) 任意の 1 文字に一致します。

.

.

a.o は、"around" の "aro" および "about" の "abo" には一致しますが、"across" の "acro" には一致しません。

直前の正規表現の 0 回以上の繰り返しに一致します (一致する文字列の長さを最大限にします)。

*

*

a*r は、"rack" の中の "r"、"ark" の中の "ar"、"aardvark" の中の "aar" に一致します。

0 回以上の任意の文字に一致します (ワイルドカード *)

.*

.*

c.*e は、"racket" の中の "cke"、"comment" の中の "comme"、"code" の中の "code" に一致します。

直前の正規表現の 1 回以上の繰り返しに一致します (一致する文字列の長さを最大限にします)。

+

+

e.+e は、"feeder" の中の "eede" に一致しますが、"ee" には一致しません。

1 回以上の任意の文字に一致します (ワイルドカード ?)

.+

.+

e.+e は、"feeder" の中の "eede" に一致しますが、"ee" には一致しません。

直前の正規表現の 0 回以上の繰り返しに一致します (一致する文字列の長さを最小限にします)。

*?

@

e.*?e は、"feeder" の中の "ee" に一致しますが、"eede" には一致しません。

直前の正規表現の 1 回以上の繰り返しを検索します (一致する文字列の長さを最小限にします)。

+?

#

e.+?e は、"enterprise" 中の "ente" および "erprise" には一致しますが、単語全体 "enterprise" には一致しません。

一致文字列を、行頭または文字列の先頭に固定します。

^

^

^car は、単語 "car" が行の先頭に登場する場合のみ、その単語に一致します。

一致文字列を、行末に固定します。

\r?$

$

End\r?$ は、"end" が行末に登場する場合のみ、その単語に一致します。

セット内の任意の 1 文字と一致します。

[abc]

[abc]

b[abc] は、"ba"、"bb"、および "bc" に一致します。

範囲内の任意の文字に一致します

[a-f]

[x-y]

be[n-t] は、"between" の中の "bet"、"beneath" の中の "ben"、および "beside" の中の "bes" には一致しますが、"below" の中の "bel" には一致しません。

かっこで囲まれた表現を 1 つのまとまりとして扱い、その表現に対して暗黙的に番号を付けます。

()

()

([a-z]) X\1 は、"aXa" および "bXb" に一致しますが、"aXb" には一致しません。"."\1"は、最初の表現グループ "[a-z]" を指します。

一致を否定します。

(?!abc)

~(abc)

real (?!ity) は、"realty" や "really" の中の "real" に一致しますが、"reality" の中の "real" には一致しません。また、"realityreal" の中の 2 番目の "real" に一致します (一方、最初の "real" には一致しません)。

指定された一連の文字の中に含まれていない任意の文字と一致します。

[^abc]

[^abc]

be[^n-t] は、"before" の中の "bef"、"behind" の中の "beh"、および "below" の中の "bel" に一致しますが、"beneath" の中の "ben" には一致しません。

記号の前にある表現、または後にある表現のいずれかに一致します。

|

|

(sponge|mud) bath は "sponge bath" および "mud bath" に一致します。

円記号の後の文字をエスケープ処理します。

\

\

\^ は、^ 文字に一致します。

直前の文字またはグループが登場する回数を指定します。

{x}、ここで x は登場する回数です。

\x、ここで x は登場する回数です。

x(ab){2}x は "xababx" に一致し、x(ab){2,3}x は "xababx" および "xabababx" に一致しますが、"xababababx" には一致しません。

Unicode 文字クラスに含まれるテキストに一致します。ここで、"X" は Unicode 番号です。Unicode 文字クラスの詳細については、次を参照してください。

"Unicode Standard 5.2 Character Properties (Unicode 規格 5.2 の文字のプロパティ)"

\p{X}

:X

\p{Lu} は "Thomas Doe" の中の "T" および D" に一致します。

ワード境界に一致します。

\b (\b が文字クラスの外部にあるときはワード境界を指定し、文字クラスの内部にあるときはバックスペースを指定します)。

< と > は、それぞれ単語の先頭と末尾を指定します。

\bin は、"inside" の中の "in" と一致しますが、"pinto" には一致しません。

改行 (つまり、キャリッジ リターンとそれに続く新しい行) に一致します。

\r?\n

\n

End\r?\nBegin は、"End" が行の最後の文字列で、"Begin" が次の行の先頭の文字列である場合のみ、単語 "End" と "Begin" に一致します。

任意の英数字 1 文字に一致します。

\w

:a

a\wd は、"add" および "a1d" に一致しますが、"a d" には一致しません。

任意の空白文字と一致します。

(?([^\r\n])\s)

:b

Public\sInterface は、語句 "Public Interface" に一致します。

任意の数字 1 文字に一致します。

\d

:d

\d は、"3456" の中の "3"、"23" の中の "2"、および "1" の中の "1" に一致します。

Unicode 文字に一致します。

\uXXXX、ここで XXXX は、Unicode 文字の値を指定します。

\uXXXX、ここで XXXX は、Unicode 文字の値を指定します

\u0065 は、文字 "e" に一致します。

識別子に一致します

\b(_\w+|[\w-[0-9_]]\w*)\b

:i

"type1" に一致しますが、&type1" や "#define" に一致しません。

引用符の内側にある文字列と一致します

((\".+?\")|('.+?'))

:q

単一引用符または二重引用符の内部にある任意の文字列に一致します。

16 進数に一致します

\b0[xX]([0-9a-fA-F])\b

:h

"0xc67f" 一致しますが、"0xc67fc67f" には一致しません。

整数と小数に一致します

\b[0-9]*\.*[0-9]+\b

:n

"1.333" に一致します。

参照

その他の技術情報

テキストの検索と置換