正規表現の構文リファレンス

40 行を構文・意味・例のいずれかで検索するか、表をそのまま読んでください。注記では JavaScript、PCRE、Python、Java、.NET、Go、Ruby の違いを示しています。

ブラウザ内でローカルに実行
構文意味
\メタ文字をエスケープするか、特殊なシーケンスを開始します。\. リテラルのドットに一致します。
^入力の先頭、または複数行モードでは行の先頭に一致します。^Error
$入力の末尾、または複数行モードでは行の末尾に一致します。done$
i, m, s, u, x末尾の区切り文字の後に付けるフラグです。i は大文字小文字を無視し、m は ^ と $ を行頭・行末にも一致させ、s は . を改行にも一致させ、u は JavaScript を Unicode モードにし、x は PCRE・Python・Java・Ruby でエスケープされていない空白と # コメントを無視します。/^done$/im
.1文字に一致します。dot-all モードが有効でない限り、改行は除外されます。a.c
*直前のトークンを0回以上繰り返します。ab*c
+直前のトークンを1回以上繰り返します。ab+c
?直前のトークンを省略可能にします。colou?r
{n}直前のトークンをちょうど n 回繰り返します。\d{4}
{n,}直前のトークンを少なくとも n 回繰り返します。\w{3,}
{n,m}直前のトークンを n 回以上 m 回以下繰り返します。[A-F0-9]{2,8}
*?, +?, ??遅延繰り返しを使い、入力を可能な限り少なく消費します。<.*?>
*+, ++, ?+絶対量指定子です。貪欲に一致し、文字を戻さないため、エンジンはその内部へバックトラックできません。PCRE・Perl・Java・Python 3.11 以降が対応し、JavaScript・Go・それ以前の Python は対応しません。\d++
(?>pattern)アトミックグループです。一度一致した部分を保持し、バックトラックで再評価しません。PCRE・.NET・Java・Perl・Python 3.11 以降が対応し、JavaScript にはアトミックグループがありません。(?>a|ab)c
[abc]セット内の1文字に一致します。gr[ae]y
[^abc]セットに含まれない1文字に一致します。[^0-9]
[a-z]指定された範囲の1文字に一致します。[A-Za-z]
[[:alpha:]]角かっこ内で使う POSIX 文字クラスです。PCRE・Java・Ruby・grep 系エンジンが対応し、JavaScript と Python は対応しません(Unicode プロパティが移植性のある書き方です)。[[:digit:]]+
x|y左側の式または右側の式に一致します。cat|dog
(pattern)サブ式をグループ化し、マッチをキャプチャします。(ab)+
(?:pattern)キャプチャを作成せずにサブ式をグループ化します。(?:https?)://
(?<name>pattern)エンジンが対応している場合に、名前付きキャプチャグループを作成します。(?<year>\d{4})
(?P<name>pattern)Python と Go の RE2 エンジンが使う名前付きグループの書き方です。RE2 はグループへの後方参照を受け付けません。(?P<year>\d{4})
(?'name'pattern).NET・PCRE・Perl・Ruby が使うもう一つの名前付きグループの書き方です。Java と JavaScript は山かっこの形式だけを受け付けます。(?'year'\d{4})
\1最初のグループでキャプチャされた同じテキストにマッチします。\b(\w+)\s+\1\b
\k<name>JavaScript・.NET・PCRE・Java・Ruby で名前付きグループへの後方参照を書きます。Python は P= の形式で書きます。(?<w>\w+)\s+\k<w>
(?=pattern)肯定先読み: 後続にマッチすることを要求しますが、その部分を消費しません。\d+(?=px)
(?!pattern)否定先読み: 後続のテキストがマッチしないことを要求します。foo(?!bar)
(?<=pattern)肯定後読み: 前方にマッチすることを要求しますが、その部分を消費しません。(?<=\$)\d+
(?<!pattern)否定後読み: 前方のテキストがマッチしないことを要求します。(?<!-)\b\d+
\A, \z, \ZPCRE・Python・Java・Ruby で文字列の絶対的な先頭と末尾に一致するアンカーです。末尾の形式は最後の改行も許容します。JavaScript には同等のものがないため、m フラグなしの ^ と $ を使います。\A\d{4}\z
\d / \D数字 / 非数字にマッチします。Unicode の挙動はエンジンに依存します。\d+
\w / \W単語文字 / 非単語文字にマッチします。正確な文字セットはエンジンに依存します。\w+
\s / \S空白文字 / 非空白文字にマッチします。\s+
\b / \B単語境界 / 単語境界ではない位置にマッチします。\bword\b
\n, \r, \t改行、復帰、タブにマッチします。\r?\n
\xNN2 桁の 16 進コード単位で文字にマッチします。\x41 A にマッチします。
\uNNNNこの表記をサポートするエンジンでは、4 桁の Unicode コード単位で文字にマッチします。\u00A9 © にマッチします。
\u{1F600}, \x{1F600}U+FFFF より上の符号位置に一致します。JavaScript は u フラグ付きで \u{...} と書き、PCRE・Perl・Java は \x{...}、Python は \U0001F600 と書きます。\u{1F600}
\p{Letter}Unicode プロパティエスケープがサポートされ有効な場合に、Unicode プロパティにマッチします。\p{Letter}+

正規表現の構文の調べ方

40 個の構文を「書き方・意味・短い例」の 3 列でまとめています。対象は JavaScript、PCRE、Python、Java、.NET、Go、Ruby に共通するエスケープ、アンカー、量指定子、文字クラス、グループ、先読み・後読み、フラグ、Unicode エスケープで、高度な書き方については対応しないエンジン名も示しています。

このページはパターンを実行しません。コンパイルも照合も行いません。表はページに含まれ、検索欄はブラウザ内で行を絞り込むだけで、入力内容はどこにも送信されません。

  1. 表の上の検索欄に入力すると、構文・意味・例のいずれかで絞り込めます。lookbehind なら後読みの 2 行、\d なら 10 行が残り、クリアで 40 行すべてに戻ります。
  2. 検索はパターンではなく文字列として照合し、大文字と小文字を区別しません。lookbehind、Lookbehind、LOOKBEHIND は同じ結果になります。一致がないときは空の表ではなく該当なしの案内が出ます。
  3. 行は左から右へ読んでください。1 列目はパターンに書く内容、2 列目は動作、3 列目は短い例です。
  4. 1 列目のコピーボタンを押すと、その構文だけがクリップボードに入ります。コピーされるのは *+, ++, ?+ のようなトークン単体です。
  5. 高度な構文を使う前にエンジンの注記を確認してください。絶対量指定子、アトミックグループ、POSIX クラス、\A \z \Z、名前付きグループ、\u{...} の行には対応エンジンを書いています。

この表で扱う内容

40 行で扱う範囲

エスケープ(\d、\w、\b、\xNN、\uNNNN、\p{Letter})、アンカー(^、$、\A、\z、\Z)、貪欲・最小・絶対の量指定子、角括弧の文字クラスと POSIX クラス、キャプチャあり・なしのグループ、名前付きグループの 3 通りの書き方、後方参照、先読み・後読み、インラインフラグ、U+FFFF を超える符号位置のエスケープ。

例の列は完成したプログラムではなく断片です。\d++ や (?>a|ab)c は構文を文脈ごと示し、文で終わる 3 行(\. はリテラルのドットに一致します。、\x41 は A に一致します。、\u00A9 は © に一致します。)はパターンを試すときの読み方のまま書いています。

エンジンによる違い

Go の RE2 は先読み・後読みと後方参照を持ちません。JavaScript にはアトミックグループと絶対量指定子がなく、\u{...} には u フラグが必要です。[[:alpha:]] のような POSIX クラスは PCRE、Java、Ruby、grep 系では使えますが、JavaScript と Python では使えません。

Python 3.11 以降はアトミックグループと絶対量指定子に対応しました。PCRE、Perl、Java はそれ以前から対応しています。名前付きグループは Python と RE2 が (?P<name>...)、.NET、PCRE、Perl、Ruby が (?'name'...) で、後方参照は Python だけ (?P=name) と書き、それ以外は \k<name> です。

このページが行わないこと

これは一覧表であり、テスターではありません。パターンのコンパイル、入力文字列との照合、コードの生成は行いません。上のタブに同じ系統のツールがあります。Regex Tester はパターンを実行し、Regex Code Generator は 7 言語のコードを書き出し、Common Regex Patterns は既成パターンをまとめています。

表は HTML そのものなので、JavaScript を切っても読めます。スクリプトが必要なのは絞り込み、件数表示、コピーボタンだけです。検索はページ上の文字列を対象にするため、\d+ のような入力はパターンではなく 3 文字として扱われます。

最近使ったツール: