正規表現テスター

/ /

正規表現を入力し、テスト対象のテキストを貼り付けると、テスターがパターンを実行し、見つかったすべてのマッチを一覧表示します。各結果はマッチの開始位置と各キャプチャグループの内容を示すので、パターンが何を捉えたのかを正確に確認できます。大文字小文字を区別しない、複数行、dotall のフラグを切り替えて、パターンの挙動を変えられます。

正規表現のテスト方法

  1. 1

    パターンを入力する

    区切り文字なしで式を入力すると、テスターが `/ /` で囲みます。無効なパターンは、静かに失敗する代わりに分かりやすいエラーメッセージを表示します。

  2. 2

    フラグを選ぶ

    必要に応じてマッチさせるため、`i`(大文字小文字を区別しない)、`m`(複数行)、`s`(dotall)を有効にします。

  3. 3

    テストテキストを貼り付ける

    検索したいテキストを追加します。テスターは全体を走査し、最初の1件だけでなくすべてのマッチを見つけます。

  4. 4

    マッチを調べる

    各マッチは、テキスト内の位置(offset)、完全一致、そして番号付きの各キャプチャグループを表示します。

テスターが示してくれること

パターンを頭の中で、あるいは手早い grep で走らせると、一致するかどうかは分かります。テスターはさらに次を示します。

  • 各マッチとその位置。 常にテキスト全体を検索し、各マッチをその開始位置の文字オフセットとともに報告します。
  • どのグループが何を捉えたか。 各マッチは完全一致と番号付きのキャプチャグループに分解されるので、ある (...) が期待どおりの部分を捉えたか確認できます。
  • フラグが何を変えるか。 ims を有効にして再テストすると、大文字小文字の無視・複数行・dotall が結果をどう変えるかが分かります。

フラグの早わかり

フラグ 名称 何を変えるか
i 大文字小文字を区別しない Aa にも一致し、その逆も同様
m 複数行 ^$ がテキスト全体だけでなく各行の先頭と末尾で一致する
s Dotall . が改行文字にも一致する

マッチは常にグローバルです。テスターはテキスト内のすべてのマッチを返すので、別途「global」フラグを設定する必要はありません。パターンは Unicode 対応の PCRE エンジンで実行されるため、\w\d のようなクラスは国際的なテキストでも一貫して動作します。

これが見つけやすくする、よくある正規表現の問題

症状 よくある原因
すべてを覆う巨大な1件のマッチ .* は貪欲。.*?[^"]* のような否定クラスを使う
^$ が1回しか一致しない 複数行テキストで m フラグが不足
. が改行で止まる s フラグが不足
キャプチャグループの順序が予想外 入れ子の ( がグループ番号をずらす。左から右へ数える
パターンの実行が遅い 重なり合う選択肢に入れ子の *+ があると、多くのバックトラッキングが起きる

より速く安全なパターンのためのヒント

  • マッチが先頭から始まるときは ^ でアンカーし、エンジンが文字列全体を走査しないようにします。
  • 選択(a|b|c)より文字クラス([abc])を優先します。文字クラスは主要なエンジンのすべてで高速です。
  • 終端文字が分かっているときは、貪欲な .*[^"]* のような否定クラスに置き換えると、バックトラッキングがなくなります。

よくある質問

PHP に組み込まれたエンジンである PCRE を使い、Unicode モードを有効にしてパターンを実行します。\d\b、先読み・後読みなど PCRE 固有の構文は期待どおりに動作します。JavaScript、Python などの言語でパターンを使う場合は、リリース前に細かな構文の違いを確認してください。

すべてのマッチです。テスターは常にテキスト全体を検索するので、別途「global」フラグを設定する必要はありません。各マッチはテキスト内の位置とともに一覧表示されます。

はい。各マッチは完全一致と番号付きの各キャプチャグループに分解されるので、各 (...) がテキストのどの部分を捉えたか確認できます。

i はマッチを大文字小文字を区別しないようにし、m^$ を各行の境界で一致させ、s. が改行文字に一致するようにします。オン・オフを切り替えて再テストし、結果を比較してください。

テスターは、静かにマッチ0件を返す代わりに、閉じていない角かっこや終了していないグループなど、問題を説明する分かりやすいエラーメッセージを表示します。

関連ツール

このツールは他の言語でも利用できます