正規表現言語要素

正規表現とは、入力テキスト内で正規表現エンジンによる照合が試行されるパターンです。 パターンは、1 個以上の文字リテラル、演算子、または構成体で構成されます。 簡単な紹介については、「.NET Framework の正規表現」を参照してください。

このクイック リファレンスの各セクションでは、正規表現の定義に使用できる特定カテゴリの文字、演算子、および構成体を一覧表示します。

  • 文字のエスケープ

  • 文字クラス

  • アンカー

  • グループ化構成体

  • 量指定子

  • 前方参照構成体

  • 代替構成体

  • 置換

  • その他の構成体

文字のエスケープ

正規表現内の円記号 (\) は、直後の文字が特殊文字 (次の表を参照) であるか、文字どおりに解釈する必要があることを示します。 詳細については、「文字のエスケープ」を参照してください。

エスケープ文字

説明

パターン

一致する文字列

\a

ビープ音文字の \u0007 と一致します。

\a

"Error!" + '\u0007' の "\u0007"

\b

文字クラスでバックスペースの \u0008 と一致します。

[\b]{3,}

"\b\b\b\b" の "\b\b\b\b"

\t

タブの \u0009 と一致します。

(\w+)\t

"item1\titem2\t" の "item1\t"、"item2\t"

\r

キャリッジ リターンの \u000D と一致します。 \r は改行文字の \n とは異なります。

\r\n(\w+)

"\r\nThese are\ntwo lines." の "\r\nThese"

\v

垂直タブの \u000B と一致します。

[\v]{2,}

"\v\v\v" の "\v\v\v"

\f

フォーム フィードの \u000C と一致します。

[\f]{2,}

"\f\f\f" の "\f\f\f"

\n

改行文字の \u000A と一致します。

\r\n(\w+)

"\r\nThese are\ntwo lines." の "\r\nThese"

\e

エスケープ文字の \u001B と一致します。

\e

"\x001B" の "\x001B"

\nnn

8 進数表現で文字を指定します (nnn は 3 桁までの桁で構成されます)。

\w\040\w

"a bc d" の

"a b"、"c d"

\xnn

16 進数表現で文字を指定します (nn は 2 桁で構成されます)。

\w\x20\w

"a bc d" の

"a b"、"c d"

\cX

\cx

X または x で指定された ASCII の制御文字と一致します。X または x は制御文字です。

\cC

"\x0003" (Ctrl-C) の "\x0003"

\unnnn

16 進数形式で表される Unicode 文字 (nnnn で表される 4 桁の数字) と一致します。

\w\u0020\w

"a bc d" の

"a b"、"c d"

\

このトピック内の表に示されているエスケープ文字として認識されない文字が後ろに付いている場合は、その文字と一致します。 たとえば、\* は \x2A と同じです。 これを使用すると、正規表現エンジンによって言語要素 (* や ? など) と文字リテラル (\* や \? など) のあいまいさが解消されます。

\d+[\+-x\*]\d+\d+[\+-x\*\d+

"(2+2) * 3*9" の "2+2" および "3*9"

ページのトップへ

文字クラス

文字クラスは、文字セットのいずれかと一致します。 文字クラスに含まれる言語要素を次の表に示します。 詳細については、「文字クラス」を参照してください。

文字クラス

説明

パターン

一致する文字列

[character_group]

character_group 内の任意の 1 文字と一致します。 既定では、大文字と小文字が区別されます。

[ae]

"gray" の "a"

"lane" の "a"、"e"

[^character_group]

否定: character_group 内にない任意の 1 文字と一致します。 既定では、character_group 内で大文字と小文字が区別されます。

[^aei]

"reign" の "r"、"g"、"n"

[first-last]

文字範囲: first から last までの範囲にある任意の 1 文字と一致します。

[A-Z]

"AB123" の "A"、"B"

.

ワイルドカード: \n を除く任意の 1 文字と一致します。

a.e

"nave" の "ave"

"water" の "ate"

\p{name}

name で指定された Unicode 一般カテゴリまたは名前付きブロック内の任意の 1 文字と一致します。

\p{Lu}

\p{IsCyrillic}

"City Lights" の "C"、"L"

"ДЖem" の "Д"、"Ж"

\P{name}

name で指定された Unicode 一般カテゴリまたは名前付きブロックにない任意の 1 文字と一致します。

\P{Lu}

\P{IsCyrillic}

"City" の "i"、"t"、"y"

"ДЖem" の "e"、"m"

\w

単語に使用される任意の文字と一致します。

\w

"ID A1.3" の "I"、"D"、"A"、"1"、"3"

\W

単語に使用される文字以外の任意の文字と一致します。

\W

"ID A1.3" の " "、"."

\s

空白文字と一致します。

\w\s

"ID A1.3" の "D "

\S

空白以外の文字と一致します。

\s\S

"int __ctr" の " _"

\d

10 進数字と一致します。

\d

"4 = IV" の "4"

\D

10 進数以外の任意の文字と一致します。

\D

"4 = IV" の " "、"="、" "、"I"、"V"

ページのトップへ

アンカー

アンカー (アトミック ゼロ幅アサーション) を使用すると、文字列内での現在位置によって一致するかどうかが決まります。しかし、エンジンで後方の文字列が読み込まれたり、複数の文字と一致したりすることはありません。 アンカーであるメタ文字を次の表に示します。 詳細については、「正規表現のアンカー」を参照してください。

アサーション

説明

パターン

一致する文字列

^

文字列または行の先頭で一致する必要があります。

^\d{3}

"901-"

("901-333-" の)

$

文字列の末尾で一致するか、行または文字列の末尾にある \n の前で一致する必要があります。

-\d{3}$

"-333"

("-901-333" の)

\A

文字列の先頭で一致する必要があります。

\A\d{3}

"901"

("901-333-" の)

\Z

文字列の末尾で一致するか、文字列の末尾にある \n の前で一致する必要があります。

-\d{3}\Z

"-333"

("-901-333" の)

\z

文字列の末尾で一致する必要があります。

-\d{3}\z

"-333"

("-901-333" の)

\G

前回の一致が終了した位置で一致する必要があります。

\G\(\d\)

"(1)(3)(5)[7](9)" の "(1)"、"(3)"、"(5)"

\b

\w (英数字) と \W (英数字以外) 文字の境界位置で一致する必要があります。

\b\w+\s\w+\b

"them theme them them" の "them them"

\B

\b 境界以外で一致する必要があります。

\Bend\w*\b

"end sends endure lender" の "ends"、"ender"

ページのトップへ

グループ化構成体

グループ化構成体は、正規表現の部分式を表し、通常は入力文字列の部分文字列をキャプチャします。 グループ化構成体に含まれる言語要素を次の表に示します。 詳細については、「グループ化構成体」を参照してください。

グループ化構成体

説明

パターン

一致する文字列

(subexpression)

一致した部分式をキャプチャして、0 から始まる序数を代入します。

(\w)\1

"deep" の "ee"

(?<name> subexpression)

一致した部分式を名前付きグループにキャプチャします。

(?<double>\w)\k<double>

"deep" の "ee"

(?<name1-name2> subexpression)

グループ定義の均等化を定義します。 詳細については、「グループ化構成体」の「グループ定義の均等化」を参照してください。

(((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$

"3+2^((1-3)*(3-1))" の "((1-3)*(3-1))"

(?: subexpression)

非キャプチャ グループを定義します。

Write(?:Line)?

"Console.WriteLine()" の "WriteLine"

(?imnsx-imnsx: subexpression)

指定したオプションを subexpression に適用するか、または無効にします。 詳細については、「正規表現のオプション」を参照してください。

A\d{2}(?i:\w+)\b

"A12xl A12XL a12xl" の "A12xl"、"A12XL"

(?= subexpression)

ゼロ幅の肯定先読みアサーションです。

\w+(?=\.)

"He is. The dog ran. The sun is out." の "is"、"ran"、および "out"

(?! subexpression)

ゼロ幅の否定先読みアサーションです。

\b(?!un)\w+\b

"unsure sure unity used" の "sure"、"used"

(?<= subexpression)

ゼロ幅の正の後読みアサーションです。

(?<=19)\d{2}\b

"1851 1999 1950 1905 2003" の "99"、"50"、"05"

(?<! subexpression)

ゼロ幅の負の後読みアサーションです。

(?<!19)\d{2}\b

"1851 1999 1950 1905 2003" の "51"、"03"

(?> subexpression)

非バックトラッキング ("最長") 部分式です。

[13579](?>A+B+)

"1ABB 3ABBC 5AB 5AC" の "1ABB"、"3ABB"、および "5AB"

ページのトップへ

量指定子

量指定子は、一致するために、入力文字列中に直前の要素 (文字、グループ、または文字クラス) がいくつ存在しなければならないかを指定します。 量指定子に含まれる言語要素を次の表に示します。 詳細については、「量指定子」を参照してください。

量指定子

説明

パターン

一致する文字列

*

直前の要素と 0 回以上一致します。

\d*\. \d

".0"、"19.9"、"219.9"

+

直前の要素と 1 回以上一致します。

"be+"

"been" の "bee"、"bent" の "be"

?

直前の要素と 0 回または 1 回一致します。

"rai? n"

"ran"、"rain"

{}n

直前の要素とちょうど n 回一致します。

",\d{3}"

"1,043.6" の ",043"、"9,876,543,210" の ",876"、",543"、および ",210"

{,}n

直前の要素と n 回以上一致します。

"\d{2,}"

"166"、"29"、"1930"

{n,m}

直前の要素と n 回以上 m 回以下一致します。

"\d{3,5}"

"166"、"17668"

"193024" の "19302"

*?

直前の要素と 0 回以上 (ただし、できるだけ少ない回数) 一致します。

\d*? \. \d

".0"、"19.9"、"219.9"

+?

直前の要素と 1 回以上 (ただし、できるだけ少ない回数) 一致します。

"be+?"

"been" の "be"、"bent" の "be"

??

直前の要素と 0 回または 1 回 (ただし、できるだけ少ない回数) 一致します。

"rai?? n"

"ran"、"rain"

{}?n

直前の要素とちょうど n 回一致します。

",\d{3}?"

"1,043.6" の ",043"、"9,876,543,210" の ",876"、",543"、および ",210"

{,}?n

直前の要素と n 回以上 (ただし、できるだけ少ない回数) 一致します。

"\d{2,}?"

"166"、"29"、"1930"

{n,m}?

直前の要素と n 回以上 m 回以下 (ただし、できるだけ少ない回数) 一致します。

"\d{3,5}?"

"166"、"17668"

"193024" の "193"、"024"

ページのトップへ

前方参照構成体

前方参照を使用すると、以前に一致した部分式を、同じ正規表現内で引き続き識別できます。 .NET Framework の正規表現でサポートされている前方参照構成体を、次の表に示します。 詳細については、「前方参照構成体」を参照してください。

前方参照構成体

説明

パターン

一致する文字列

\number

前方参照。 番号付き部分式の値に一致します。

(\w)\1

"seek" の "ee"

\k<name>

名前付き前方参照。 名前付きの式の値に一致します。

(?<char>\w)\k<char>

"seek" の "ee"

ページのトップへ

代替構成体

代替構成体は、OR 一致を有効にするように正規表現を変更します。 これらの構成体に含まれる言語要素を次の表に示します。 詳細については、「代替構成体」を参照してください。

代替構成体

説明

パターン

一致する文字列

|

縦棒 (|) 文字で区切られた要素のいずれかと一致します。

th(e|is|at)

"this is the day. " の "the"、"this "

(?(expression)yes|no)

expression と一致した場合は yes 部分と一致します。それ以外の場合は no 部分 (省略可能) と一致します。 expression はゼロ幅アサーションとして解釈されます。

(?(A)A\d{2}\b|\b\d{3}\b)

"A10 C103 910" の "A10"、"910"

(?(name)yes|no)

名前付きキャプチャ name と一致した場合は yes と一致します。それ以外の場合は no (省略可能) と一致します。

(?<quoted>")?(?(quoted).+?"|\S+\s)

"Dogs.jpg "Yiska playing.jpg"" の Dogs.jpg、"Yiska playing.jpg"

ページのトップへ

置換

置換は、置換パターンでサポートされる正規表現言語要素です。 詳細については、「置換」を参照してください。 アトミック ゼロ幅アサーションであるメタ文字を次の表に示します。

文字

説明

パターン

置換パターン

入力文字列

結果文字列

$number

グループ番号 number と一致した部分文字列に置換されます。

\b(\w+)(\s)(\w+)\b

$3$2$1

"one two"

"two one"

${name}

名前付きグループ name と一致した部分文字列に置換されます。

\b(?<word1>\w+)(\s)(?<word2>\w+)\b

${word2} ${word1}

"one two"

"two one"

$$

"$" リテラルに置換されます。

\b(\d+)\s?USD

$$$1

"103 USD"

"$103"

$&

一致したパターン全体と同じパターンに置換されます。

(\$*(\d*(\.+\d+)?){1})

**$&

"$1.30"

"**$1.30**"

$`

一致した場所より前にある入力文字列のすべてに置換されます。

B+

$`

"AABBCC"

"AAAACC"

$'

一致した場所より後にある入力文字列のすべてに置換されます。

B+

$'

"AABBCC"

"AACCCC"

$+

キャプチャされた最後のグループに置換されます。

B+(C+)

$+

"AABBCCDD"

AACCDD

$_

入力文字列全体に置換されます。

B+

$_

"AABBCC"

"AAAABBCCCC"

ページのトップへ

その他の構成体

その他の構成体は、正規表現パターンを変更するか、それに関する情報を指定します。 .NET Framework でサポートされているその他の構成体を、次の表に示します。 詳細については、「その他の構成体」を参照してください。

構成体

定義

(?imnsx-imnsx)

パターンの途中で、大文字と小文字の区別などのオプションを設定または無効化します。 詳細については、「正規表現のオプション」を参照してください。

\bA(?i)b\w+\b は、"ABA Able Act" の "ABA"、"Able" に一致します。

(?# comment)

インライン コメントです。 コメントは、最初の閉じかっこで終了します。

\bA(?#Matches words starting with A)\w+\b

# [to end of line]

X モード コメントです。 コメントの先頭はエスケープされない # で、コメントは行末まで継続します。

(?x)\bA\w+\b#Matches words starting with A

ページのトップへ

参照

参照

System.Text.RegularExpressions

Regex

概念

正規表現クラス

その他の技術情報

.NET Framework の正規表現

.NET Framework での正規表現に関するベスト プラクティス

正規表現の例