オンラインで正規表現をテストする方法

· 5 分で読めます

正規表現はプログラミングで最も強力なツールの1つであり、同時に正しく書くのが最もイライラするものの1つです。正規表現テスターを使うと、コードを実行し、出力を確認し、何が間違ったかを推測する代わりに、パターンをインタラクティブに作成およびデバッグできます。フィードバックループは反復ごとに数分から数秒に短縮されます。

正規表現テスターを使う理由

コードエディタで正規表現を書くということは、実行時にしかエラーが見えないということです。テスターは次のものを示します:

オンラインで正規表現をテストする手順

  1. パターンを入力: パターンフィールドに正規表現を入力します。必要に応じてフラグ(グローバル用のg、大文字小文字を区別しないi、複数行のm)を切り替えます。
  2. テストテキストを貼り付け: マッチングしたいテキストを入力します。マッチはリアルタイムでハイライトされます。
  3. 結果を表示: 下にキャプチャグループが一覧表示されたすべてのマッチを確認します。「置換」フィールドを使って置換をテストします。

正規表現の簡単な歴史

正規表現は、数学者Stephen Kleeneによって1951年にニューラルネットワークの研究で「正規イベント」の表記法として形式化されました。Ken ThompsonがBell LabsのQEDテキストエディタで1968年に実装し、その後edエディタ(1969年)、最後にgrepユーティリティ(1973年、名前は「global / regular expression / print」から)に実装したとき、理論から実用に飛躍しました。

1987年にLarry Wallが導入したPerlは、正規表現の構文を大幅に拡張しました。非貪欲量指定子、先読み、名前付きグループ、\d\wのような文字クラスのショートカットなどです。1997年にリリースされたPerl互換正規表現(PCRE)ライブラリは、ほとんどのモダンな言語の事実上の標準になりました。

今日、事実上すべてのプログラミング言語に正規表現の組み込みサポートがありますが、構文はわずかに異なります。JavaScriptのエンジン(ChromeのV8、FirefoxのSpiderMonkey)は高度に最適化されており、ほとんどのオンライン正規表現テスターを動かしています。PHP、Python(reモジュール)、Java(java.util.regex)は近い関係にあるが同一ではない構文を使います。高度な機能では、自分が書いているのがどのフレーバー向けかを知ることが重要です。

知っておく価値のある一般的な正規表現パターン

メールアドレス(基本):

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}

URL:

https?://[^\s]+

電話番号(米国):

\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}

日付(YYYY-MM-DD):

\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])

IPアドレス(IPv4):

\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b

HEXカラーコード:

#(?:[0-9a-fA-F]{3}){1,2}\b

スラグ(URL安全な識別子):

^[a-z0-9]+(?:-[a-z0-9]+)*$

空白を取り除いた文字列:

^\s*(.*?)\s*$

言語間のフレーバーの違い

正規表現の構文はほとんど移植可能ですが、注意点があります:

テスター(ほぼ常にJavaScriptフレーバー)で正規表現を書くときは、コミットする前に、使ったすべての機能をターゲット言語がサポートすることを確認してください。

よくある落とし穴

正規表現を使うべきでないとき

正規表現は一部のジョブには間違ったツールです:

複数のネストされたグループを持つ100文字を超える正規表現を書いていることに気づいたら、おそらく間違った問題を解いています。

より良い正規表現を書くためのヒント

プライバシーと機密テストデータ

正規表現テスターは完全にブラウザ内で、JavaScriptのネイティブRegExpエンジンを使って動作します。書いたパターン、貼り付けたテストテキスト、見えるマッチはすべてデバイス上に留まります。どのサーバーにもアップロード、ログ、分析されません。

これは正規表現のテストテキストがしばしば機密情報を含むからです。本番のログサンプル(実際のユーザーID、IPアドレス、セッショントークン付き)、CRMから引いたメールリスト、特殊な形式でフォーマットされた顧客データなど。クラウドの正規表現テスターはこれらすべてをサーバー経由でルーティングし、ときには「改善」目的で保存します。ブラウザベースのテスターは、それらすべてに対して露出ゼロです。

よくある質問

私の正規表現は他のプログラミング言語でも動作しますか?

正規表現の構文の大部分は JavaScript、Python、Java、PHP などで共通です。基本パターン(文字クラス、量指定子、アンカー)はどこでも動作します。後読みや名前付きグループのような一部の高度な機能は言語によって異なります。

テストデータはサーバーに送信されますか?

いいえ。すべてのマッチングはブラウザ内で JavaScript ネイティブの RegExp エンジンを使ってローカルに行われます。何も外部に送信されません。

置換をテストできますか?

はい。置換パターン(キャプチャグループには $1、$2 などを使用)を入力すると、検索置換の結果がリアルタイムに表示されます。

オフラインで動作しますか?

はい。ページ読み込み後はインターネット接続なしにブラウザ内で完全に動作します。