本文へスキップ
LeedyBox
支援する

正規表現テスター・置換・チートシート

一致した箇所とキャプチャグループを強調表示し、置換結果をプレビューして、6つの言語のコードとしてコピーできます。

フラグ
一致: 0

一致の詳細とキャプチャグループ

チートシート

パターンをクリックすると、サンプルテキストと一緒に読み込みます。

構文リファレンス

文字

.改行以外の任意の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|ba または b
(?=…) (?!…)後ろに続く / 後ろに続かない
(?<=…) (?<!…)前にある / 前にない

置換

$1 $<name>番号付きまたは名前付きグループのテキスト
$& $$一致全体 / 文字としての $

使用する前に結果を確認してください。 このツールは現状のまま無保証で提供されており、結果が不完全または誤っている場合があります。 利用規約

パターンは JavaScript の正規表現エンジンでテストします。ほかの言語やデータベースでは構文や動作が異なる場合があります。チートシートのパターンは実用的な例であり、完全な検証ツールではありません。

使い方

  1. 「正規表現」に、前後のスラッシュとフラグを除いたパターンを入力し、「テスト文字列」にテキストを貼り付けます。一致した箇所は入力に合わせて「一致」で強調表示され、件数が数えられます。例から始めるには、「チートシート」のパターンをクリックします。その場合、現在のパターン、フラグ、テスト文字列、置換の設定は置き換えられます。
  2. 「フラグ」で必要なフラグにチェックを入れます。文字にマウスポインターを重ねると、そのフラグの働きが表示されます。ページを開いた時点では g と u がオンになっています。g がない場合は最初の一致だけが検索され、置換されるのも最初の一致だけです。
  3. 「一致の詳細とキャプチャグループ」を確認します。各一致が位置とともに一覧表示され、各グループのテキストが $1、$2 … として、名前付きグループの場合はその名前とともに表示されます。各グループの開始位置と終了位置も確認するには、d フラグをオンにします。
  4. 置換を試すには、「一致した箇所を次で置換」にチェックを入れて置換文字列を入力します。グループは $1 や $<name> で参照できます。変更後のテキストは「置換結果」に表示され、「結果をコピー」でコピーできます。
  5. 「コード生成」で 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{…} クラスに対応していないため、実際のデータでコードをテストしてください。