devroom  WEBデザイナーや開発エンジニアのためのツールサイト

正規表現リファレンス

このページの内容はMDSNのクイックリファレンスから、よく使われそうな正規表現の表記を抜粋、参考例を行列に分けて読みやすくしたものです。
さらに詳しく学習したい人は正規表現言語 - クイック リファレンスより各種ドキュメントをご参照ください。

正規表現

正規表現とは、入力テキスト内で正規表現エンジンによる照合が試行されるパターンです。 パターンは、1 個以上の文字リテラル、演算子、または構成体で構成されます。

正規表現の定義に使用できる特定カテゴリの文字、演算子、および構成体を一覧表示します。

文字のエスケープ

正規表現内の円記号 (\) は、直後の文字が特殊文字 (次の表を参照) であるか、文字どおりに解釈する必要があることを示します。

エスケープ文字 説明 パターン 入力文字列 一致
\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
\n 改行文字の \u000A と一致します。
\ このトピック内の表に示されているエスケープ文字として認識されない文字が後ろに付いている場合は、その文字と一致します。たとえば、\*\x2A と同じであり、\.\x2E と同じです。これを使用すると、正規表現エンジンによって言語要素 (* や ? など) と文字リテラル (\* や \? など) のあいまいさが解消されます。 \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 文字と一致します。
リテラルのピリオド文字 (. または \u002E) と一致させるには、この文字の前にエスケープ文字 (\.) を指定します。
a.e nave ave
water ate
\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-333- 901
$ 文字列の末尾で一致するか、行または文字列の末尾にある \n の前で一致する必要があります。 -\d{3}$ 901-333- -333
\A 文字列の先頭で一致する必要があります。 \A\d{3} 901-333- 901
\Z 文字列の末尾で一致するか、文字列の末尾にある \n の前で一致する必要があります。 -\d{3}\Z 901-333- -333
\z 文字列の末尾で一致する必要があります。 -\d{3}\z 901-333- -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 theme
them them
\B \b 境界以外で一致する必要があります。 \Bend\w*\b end sends endure lender ends
ender

グループ化構成体

グループ化構成体は、正規表現の部分式を表し、通常は入力文字列の部分文字列をキャプチャします。グループ化構成体に含まれる言語要素を次の表に示します。

グループ化構成体 説明 パターン 入力文字列 一致
( subexpression ) 一致した部分式をキャプチャして、1 から始まる序数を代入します。 (\w)\1 deep ee
(?< name > subexpression ) 一致した部分式を名前付きグループにキャプチャします。 (?<double>\w)\k<double> deep ee
(?: subexpression ) 非キャプチャ グループを定義します。 Write(?:Line)? Console.WriteLine() WriteLine
Console.Write(value) Write
(?imnsx-imnsx: subexpression ) 指定したオプションを subexpression に適用するか、または無効にします。 A\d{2}(?i:\w+)\b A12xl A12XL a12xl A12xl
A12XL

量指定子

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

量指定子 説明 パターン 入力文字列 一致
* 直前の要素と 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

置換

置換は、置換パターンでサポートされる正規表現言語要素です。

置換 説明 パターン 置換パターン 入力文字列 結果文字列
$ 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.30 **$1.30**
$` 一致した場所より前にある入力文字列のすべてに置換されます。 B+ $` AABBCC AAAACC
$' 一致した場所より後にある入力文字列のすべてに置換されます。 B+ $' AABBCC AACCCC
$+ キャプチャされた最後のグループに置換されます。 B+(C+) $+ AABBCCDD AACCDD
$_ 入力文字列全体に置換されます。 B+ $_ AABBCC AAAABBCCCC

正規表現のオプション

正規表現エンジンで正規表現パターンを解釈する方法を制御するオプションを指定できます。これらのオプションの多くは、インラインで (正規表現パターンで) 指定することも、1 つ以上の RegexOptions 定数として指定することもできます。 このクイック リファレンスでは、インライン オプションのみを示しています。

インライン オプションは、次の 2 種類の方法で指定できます。

  1. その他の構成体 (?imnsx-imnsx) の使用。オプションまたはオプション セットの前に負符号 (-) がある場合、そのオプションが無効になります。 たとえば、(?i-mn) では、大文字と小文字を区別しない一致 (i) がオン、複数行モード (m) がオフ、名前のないグループ キャプチャ (n) がオフになります。 このオプションは、このオプションが定義されている位置から正規表現パターンに適用され、パターンの末尾まで、または別の構成体によってオプションが反転する位置まで有効になります。
  2. グループ化構成体 (?imnsx-imnsx: subexpression ) の使用。これは、指定されたグループのみに対するオプションを定義します。

.NET Framework 正規表現エンジンでは、次のインライン オプションがサポートされます。

オプション 説明 パターン 入力文字列 一致
i 大文字と小文字を区別しない一致を使用します。 \b(?i)a(?-i)a\w+\b aardvark AAAuto aaaAuto Adam breakfast aardvark
aaaAuto
m 複数行モードを使用します。 ^$ は、(入力文字列の先頭および末尾ではなく) 各行の先頭および末尾と一致します。 例については、「正規表現のオプション」の「複数行モード」を参照してください。
n 複名前のないグループをキャプチャしません。 例については、「正規表現のオプション」の「明示的なキャプチャのみ」を参照してください。
s 単一行モードを使用します。 例については、「正規表現のオプション」の「単一行モード」を参照してください。
x 正規表現パターンでエスケープされていない空白を無視します。 \b(?x)\d+\s\w+」の「単一行モード」を参照してください。 1 aardvark 2 cats IV centurions 1 aardvark
2 cats

その他の構成体

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

構成体 定義 パターン 入力文字列 一致
(?imnsx-imnsx) パターンの途中で、大文字と小文字の区別などのオプションを設定または無効化します。 \bA(?i)b\w+\b ABA Able Act ABA
Able
(?# comment ) インライン コメントです。 コメントは、最初の閉じかっこで終了します。 \bA(?#Matches words starting with A)\w+\bb
# [to end of line] X モード コメントです。 コメントの先頭はエスケープされない # で、コメントは行末まで継続します (?x)\bA\w+\b#Matches words starting with A
123
文字数カウント

文章の文字数をカウントするツールです。ブログ記事や原稿の字数管理などにお使いください。

</>
HTMLのエンコード/デコード

タグを含めた文字列をHTMLで表現するためのHTMLのエンコード/デコードができます。

.+?
正規表現チェッカー

正規表現がさくっとチェックできます。

</>
XMLエスケープ

XML用の文字列にエスケープ文字変換できます。エスケープ対象の文字は、< > & " 'の5つです。

URLのエンコード/デコード

URLのエンコード/デコードできます。