正規表現テスター:パターンを実際のテキストで構築・デバッグする
正規表現はテキストの形を表現するための小さな言語です。「この単語がここにあるか?」と尋ねる代わりに、「こんな見た目の文字列があるか?」と尋えられます。それが、コードエディター・ログファイル・フォーム入力・スクリプトでのテキストの検索・検証・抽出・置換に強力なツールである理由です。また、頭の中では正しく読めるパターンが、実際には多すぎる・少なすぎる・またはまったく何も一致しないことがあるため、間違いやすくもあります。
だからこそ、インタラクティブなテストが推測より優れています。パターンを入力して実際のサンプルテキスト上でマッチがハイライトされるのをリアルタイムで確認すると、何がキャッチされ、何が抜けて、どのキャプチャグループがどの部分を取得したかが即座にわかります。この正規表現テスターはブラウザ内で完全に動作します。パターンとサンプルテキストはページの外に出ないため、サーバーに何かを送信する心配なく、ログの行・メールアドレス・本番データを貼り付けられます。

知っておくべき基本要素
日常的なパターンのほとんどは少数のパーツから組み立てられます。これらを習得すれば、実際に出会う正規表現の大部分を読めるようになります。
文字クラスは許容される文字のセットを表します。[aeiou]は1つの母音に、[0-9]は1桁の数字に、[a-zA-Z]は1つの文字にマッチします。括弧内のキャレットはセットを否定するため、[^0-9]は「数字でない任意の文字」を意味します。略記法でタイピングを減らせます:\dは数字、\wはワード文字(文字・数字・アンダースコア)、\sは空白、そしてドット.はほぼ任意の1文字にマッチします。
量指定子は直前のパーツが何回繰り返されてよいかを指定します。*は0回以上、+は1回以上、?は0または1回(オプション)を意味します。正確な回数には{3}がちょうど3回、{2,4}が2〜4回を意味します。したがって\d{4}は4桁の年にマッチし、colou?rは両方のスペルにマッチします。
アンカーはパターンを文字ではなく位置に固定します。^はテキストの先頭に、$は末尾に、\bは単語の境界に一致します。パターン^Errorは「Error」で始まる行にのみマッチします——ログをスキャンするときにまさに必要な動作です。
グループはパターンの一部をカッコで囲み、複数の文字に量指定子を適用したり、マッチしたテキストを後で再利用するためにキャプチャしたりします。(\d{4})-(\d{2})-(\d{2})では各グループが後で取り出せる日付の構成要素をキャプチャします。パイプを使った選択肢は「または」のように機能します:cat|dog|fishは3つの単語のいずれかにマッチします。
実際によく使うパターン
いくつかの繰り返すタスクが実際の作業のほとんどをカバーします。メールらしきものをキャッチするには、[\w.+-]+@[\w-]+\.[\w.-]+が実用的な出発点です。正式な仕様に従った完全なメール検証は驚くほど複雑で、ユーザーを拒否するよりも候補をハイライトするために緩いパターンを使う方が通常は正しい選択です。
数値には\d+が連続する数字を取得し、-?\d+(\.\d+)?はオプションのマイナス符号と小数点にマッチします。先頭と末尾の空白をトリムするには^\s+|\s+$にマッチさせて空文字列で置換します。重複した単語を見つけるには、後方参照パターン\b(\w+)\s+\1\bが単語とその繰り返しにマッチします。\1は最初にキャプチャしたグループを参照します。

フラグはマッチングの動作を変える
フラグはパターン全体を変更するスイッチです。グローバルフラグ(g)は最初のマッチで停止せずすべてのマッチを検出します——すべての出現をハイライトしたいときに必要なものです。大文字小文字を区別しないフラグ(i)はerrorが「Error」や「ERROR」にも一致するようにします。複数行フラグ(m)は^と$をテキスト全体の先頭と末尾ではなく各行の先頭と末尾に一致するよう変更します——行ごとのログ処理に欠かせません。その他に便利なフラグとしてs(ドットオール:ドットを改行にも一致させる)やu(完全なUnicode処理用)があります。
言語によって方言がわずかに異なる
正規表現は1つの固定された標準ではなく、方言のファミリーです。JavaScript・Python・PCRE(PHP)・Java・.NET・Go・Rustは上記のコア構文では一致していますが、端の部分では異なります:後読みのサポート・名前付きグループの構文((?<name>...)対(?P<name>...))・Unicodeプロパティエスケープ・存在するフラグはすべて異なります。あるエンジンで動くパターンが別のエンジンでは小さな調整が必要かもしれないため、実際に出荷するフレーバーに対してテストすることが重要です。パターンが完成したら、デベロッパーツールとテキストツールが、マッチしたデータのクリーニング・エンコーディング・変換という周辺作業を支援します。
よくある質問
テキストはサーバーに送信されますか?
いいえ。正規表現テスターはブラウザ内で完全に動作します。パターンとサンプルテキストはデバイスに留まり、アップロードされないため、機密性の高いデータを貼り付けても安全です。
このツールはどの正規表現フレーバーを使いますか?
ブラウザに内蔵されたJavaScriptの正規表現エンジンを使用します。コアの構文はほとんどの言語と同じですが、一部の高度な機能はPCRE・Python・.NETとわずかに異なります。
欲張りマッチと怠惰マッチの違いは何ですか?
デフォルトでは量指定子は欲張りで、できる限り多くのテキストを取得します。疑問符を追加すると怠惰になり、できる限り少ないテキストを取得します。例えばドットとアスタリスクのパターンは欲張りで、ドット・アスタリスク・疑問符のパターンは怠惰です。
リテラルな特殊文字にマッチさせるにはどうすればよいですか?
バックスラッシュでエスケープします。実際のドットにマッチさせるにはバックスラッシュとドットを書きます。カッコ・括弧・プラス記号・疑問符などの他のメタ文字にも同様に適用されます。
なぜパターンが何もマッチしないのですか?
よくある原因は、グローバルフラグの欠如・マッチを間違った位置に固定するアンカー・エスケープされていない特殊文字・期待していた境界を超える欲張りな量指定子などです。部分ごとにテストして原因を特定しましょう。
マッチの一部をキャプチャできますか?
はい。パターンのセクションをカッコで囲んでキャプチャグループを作成します。各グループは個別に報告されるため、日付から年・月・日などのフィールドを抽出できます。
