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, \Z | PCRE・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 |
\xNN | 2 桁の 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}+ |
Go の RE2 ベースのエンジンは、意図的に先読み・後読みと後方参照を省略しています。JavaScript では、多くの Unicode プロパティエスケープに Unicode モードが必要です。PCRE、.NET、Java、Python、Ruby も、グループ構文、フラグ、置換文字列のルールが異なります。
信頼できない入力や非常に大きな入力をパターンで処理する場合は、曖昧な入れ子の量指定子を避け、入力制限を設定し、最悪ケースの動作をテストして、過剰なバックトラッキングのリスクを軽減してください。
40 個の構文を「書き方・意味・短い例」の 3 列でまとめています。対象は JavaScript、PCRE、Python、Java、.NET、Go、Ruby に共通するエスケープ、アンカー、量指定子、文字クラス、グループ、先読み・後読み、フラグ、Unicode エスケープで、高度な書き方については対応しないエンジン名も示しています。
このページはパターンを実行しません。コンパイルも照合も行いません。表はページに含まれ、検索欄はブラウザ内で行を絞り込むだけで、入力内容はどこにも送信されません。
エスケープ(\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 文字として扱われます。