正規表現テスター・置換・チートシート
一致した箇所とキャプチャグループを強調表示し、置換結果をプレビューして、6つの言語のコードとしてコピーできます。
一致の詳細とキャプチャグループ
チートシート
パターンをクリックすると、サンプルテキストと一緒に読み込みます。
構文リファレンス
文字
| . | 改行以外の任意の1文字(s フラグ使用時は改行も含む) |
| \d \D | 数字 0–9 / 数字以外 |
| \w \W | 単語文字(A–Z、a–z、0–9、_)/ それ以外 |
| \s \S | 空白文字 / 空白以外 |
| [abc] [^abc] | a、b、c のいずれか / a、b、c 以外 |
| [a-z] | a から z の範囲の文字 |
| \p{L} | あらゆる言語の文字(u フラグが必要) |
| \. \\ \( | 特殊文字を文字どおりに一致させるためのエスケープ |
量指定子
| * + ? | 0回以上 / 1回以上 / 0回か1回 |
| {n} {n,} {n,m} | ちょうど n 回 / n 回以上 / n 回以上 m 回以下 |
| *? +? {n,m}? | 最短一致: できるだけ少なく一致 |
アンカー
| ^ $ | テキストの先頭 / 末尾(m フラグ使用時は各行) |
| \b \B | 単語の境界 / 単語の境界以外 |
グループと先読み・後読み
| (…) | キャプチャグループ。$1、$2 … で参照 |
| (?:…) | キャプチャしないグループ |
| (?<name>…) | 名前付きグループ。$<name> で参照 |
| \1 \k<name> | 後方参照: グループが一致したのと同じテキスト |
| a|b | a または b |
| (?=…) (?!…) | 後ろに続く / 後ろに続かない |
| (?<=…) (?<!…) | 前にある / 前にない |
置換
| $1 $<name> | 番号付きまたは名前付きグループのテキスト |
| $& $$ | 一致全体 / 文字としての $ |
使い方
- 「正規表現」に、前後のスラッシュとフラグを除いたパターンを入力し、「テスト文字列」にテキストを貼り付けます。一致した箇所は入力に合わせて「一致」で強調表示され、件数が数えられます。例から始めるには、「チートシート」のパターンをクリックします。その場合、現在のパターン、フラグ、テスト文字列、置換の設定は置き換えられます。
- 「フラグ」で必要なフラグにチェックを入れます。文字にマウスポインターを重ねると、そのフラグの働きが表示されます。ページを開いた時点では g と u がオンになっています。g がない場合は最初の一致だけが検索され、置換されるのも最初の一致だけです。
- 「一致の詳細とキャプチャグループ」を確認します。各一致が位置とともに一覧表示され、各グループのテキストが $1、$2 … として、名前付きグループの場合はその名前とともに表示されます。各グループの開始位置と終了位置も確認するには、d フラグをオンにします。
- 置換を試すには、「一致した箇所を次で置換」にチェックを入れて置換文字列を入力します。グループは $1 や $<name> で参照できます。変更後のテキストは「置換結果」に表示され、「結果をコピー」でコピーできます。
- 「コード生成」で JavaScript、Python、Java、PHP、Go、C# のいずれかを選び、「コードをコピー」をクリックします。「一致した箇所を次で置換」にチェックが入っている場合は、コードに置換処理も含まれます。「/パターン/フラグ としてコピー」は、パターンを JavaScript の正規表現リテラルとしてコピーします。
よくある質問
テストするテキストはどこかに送信されますか?
いいえ。パターンとテスト文字列の照合は、ブラウザ自身の JavaScript 正規表現エンジンで行われ、LeedyBox にアップロードされません。ツールがそれらを保存することもありません。
パターンが予想より多くのテキストに一致するのはなぜですか?
パターンは当てはまる場所ならどこにでも一致するため、\d{3} は 12345 の中の 123 も見つけます。単語や数値全体だけに一致させるには両端に \b を付け、テキスト全体(m フラグがオンなら各行)を一致させるには、チートシートのパスワードのパターンのように ^ と $ を使います。\b は \w の単語文字(A–Z、a–z、0–9、_)に基づいており、é や 한 のような文字は単語文字とみなされません。そのため、後ろに空白が続く café に \bcafé\b は一致しません。また、+ や * などの量指定子は貪欲(最長一致)です。<b>x</b> に対して、パターン <.+> は文字列全体に一致しますが、<.+?> や <[^>]+> は最初の > で止まります。
Python、PHP、Java で動くパターンが、ここで「正規表現エラー」になるのはなぜですか?
このページは JavaScript のエンジンを使っており、ほかのエンジンの構文の一部を受け付けません。たとえば (?P<name>…) 形式の名前付きグループ、先頭に置く (?i) のようなインラインフラグ、アトミックグループ (?>…)、a++ のような強欲な量指定子などです。名前付きグループは (?<name>…) と書き、インラインフラグの代わりに「フラグ」のチェックボックスを使ってください。また、u フラグを使うと JavaScript はエスケープについてより厳しくなり、\# はエラーになります。角かっこの外にある \- も同様なので、バックスラッシュを削除するか u をオフにしてください。
\p{L} が文字に一致しなかったり、絵文字が 2 文字として数えられたりするのはなぜですか?
\p{L} のような Unicode プロパティクラスには u フラグが必要です。u がないと、JavaScript は \p{L} を p{L} という文字どおりのテキストとして読み、. は多くの絵文字のような基本多言語面(BMP)の外にある文字の半分にしか一致しません。チートシートのパターンを読み込むとそのフラグも読み込まれ、「特殊文字」以外はすべて u がオフになるため、このような構文を追加する前に「フラグ」を確認してください。u があっても . は 1 つのコードポイントに一致しますが、旗や肌の色を指定したサムズアップなど、一部の絵文字は 2 つ以上のコードポイントでできています。一致の詳細に表示される位置は、JavaScript と同じく UTF-16 のコード単位で数えるため、u があっても基本多言語面の外にある文字は 2 つ分の位置を占めます。
置換文字列の \n で改行が入らないのはなぜですか?
置換文字列は JavaScript の replace() の規則に従い、特別な意味を持つのは $ で始まるシーケンスだけです。そのため \n や \t は改行やタブではなく、バックスラッシュと英字としてそのまま挿入されます。この欄は 1 行だけなので、ここでは改行を入力できません。改行は生成されたコードの中で追加してください。一致した箇所を削除するには、チートシートの「HTML/XML タグを削除」のパターンのように、「一致した箇所を次で置換」にチェックを入れて欄を空のままにします。
パターンの処理がとても遅い場合や、一致が非常に多い場合はどうなりますか?
ブラウザが Web Worker を使える場合、照合はバックグラウンドのワーカーで行われ、2 秒たつと停止されます。そのため、a が長く続いた後に別の文字がある文字列に対する (a+)+$ のような、壊滅的なバックトラッキングを起こすパターンでも、ページが固まらずにメッセージが表示されます。「一致」の件数にはすべての一致が含まれますが、強調表示と詳細の一覧に表示されるのは最初の 1,000 件だけです。
生成されたコードは、そのままプロジェクトに貼り付けられますか?
出発点として使ってください。生成機能はパターンを JavaScript では正規表現リテラルとして、ほかの言語では文字列として書き出し、Python の (?P<name>…) や \g<1> のように構文が異なる場合は名前付きグループと置換の参照を書き換え、i、m、s フラグを対応させ、入力が text という変数に入っていることを前提とします。パターンに引用符やスラッシュが含まれる場合は、コード内で正しくエスケープされているか確認してください。それでもエンジンには違いがあり、Go の regexp パッケージが使う RE2 構文は先読み・後読みや後方参照に対応しておらず、Python 標準の re モジュールは \p{…} クラスに対応していないため、実際のデータでコードをテストしてください。