正規表現テスター
正規表現をライブでテスト:マッチ、キャプチャグループ、置換。よく使ど15パターンのライブラリ付き。
正規表現テスター - オンラインでリアルタイムにマッチを確認
正規表現は、何にマッチするかを目で見るまでは当て推量にすぎません。この無料の正規表現テスターは、入力しながらあなた自身のサンプルテキストにパターンを適用し、マッチした箇所をすべて強調表示します。壊れた検証ルールを本番へ出す前に、数秒で原因を見つけられます。
パターンを1つ目の欄に、フラグを次の欄に入力し、その下にテストしたいテキストを貼り付けます。マッチは即座に更新され、パターンが不正な場合は黙って失敗せずその場で知らせます。
正規表現テスターの本当の役割
正規表現の不具合の多くは特殊なものではありません。パターンが拾いすぎる、拾い足りない、あるいは頭にあった1つの例では動くのに2つ目で失敗する、といった具合です。テスターはその見えない挙動を目に見える形に変えます。厄介なものも含めて現実的な入力を5つ貼り付け、どれが光るかを見てください。1文字変えるだけで結果が変わるので、構文を学ぶ最短の方法でもあります。
このテスターの使い方
- 前後のスラッシュを付けずにパターンを入力します。例えば
[a-z]+\d{2,4}のように書きます。 - 必要なフラグをフラグ欄に入れます。大文字小文字を無視した全体検索なら
giです。 - 失敗してほしい境界ケースも含め、現実的なサンプルテキストをテスト文字列に貼り付けます。
- テキスト内で強調表示され、マッチとグループに一覧表示されるマッチを読み、パターンを調整し、狙った部分だけが選ばれるまで繰り返します。
- 各マッチと一緒に表示されるキャプチャグループを確認し、置換文字列に
$1や$<name>を使った置換を入力すると、書き換えたテキストが置換結果に表示されます。
どこから書けばいいか迷ったら、パターン集メニューから、よく使う15種類のパターンをフラグ付きで読み込めます。メールアドレス、URL、IPv4アドレス、UUID、16進カラーから、Markdownリンク、重複した単語、行頭・行末の余分な空白まであります。テスト欄が空か、前に読み込んだサンプルのままならサンプルテキストも一緒に入りますが、自分で貼り付けたテキストはそのまま残るので、実際のデータに対してパターンを試せます。これらは出発点であって、検証用の決まりではありません。たとえばメールのパターンは意図的に実用寄りで、規格上有効なアドレスをすべて受け付けるわけではありません。どこまで通用するかは、メールアドレスの正規表現ガイドと数字・電話番号・IPアドレスの正規表現ガイドで説明しています。
キャプチャグループと置換
パターンの一部を丸括弧で囲むとキャプチャされ、このテスターは各グループをマッチの横に一覧表示します。グループ 1、グループ 2 のように番号が付き、(?<name>...) と書いた名前付きグループも表示されます。これにより、単にマッチしたかを確認するだけでなく、年・市外局番・拡張子などをマッチから取り出せます。置換文字列 欄に入力すると、その場でマッチを書き換えられます。$1 は最初のグループ、$<name> は名前付きグループ、$& はマッチ全体、$$ はドル記号そのものを表します。
フラグとその効果
| フラグ | 効果 | 使いどころ |
|---|---|---|
g | 最初の1件だけでなくすべてのマッチを探す | 全出現箇所の置換や件数のカウント |
i | 大文字小文字を区別しない | ユーザー入力、メールアドレス、タグ |
m | ^と$が各行に効く | ログや一覧を行単位で処理する場合 |
s | .が改行にもマッチする | 複数行にまたがるブロックを取り出す場合 |
u | 完全なUnicodeモード | 絵文字、濁点付き文字、非ラテン文字 |
y | スティッキー。現在位置でのみマッチ | トークナイザーやパーサーを書く場合 |
よく使う記号
| 記号 | 意味 |
|---|---|
\d \w \s | 数字、単語構成文字、空白文字 |
. | sフラグがなければ、改行以外の任意の1文字 |
^ $ | 文字列の先頭と末尾。mがあれば各行の先頭と末尾 |
* + ? | 0回以上、1回以上、0回か1回 |
{2,5} | 2回から5回の繰り返し |
[abc] [^abc] | これらのいずれか1文字、またはこれら以外 |
(...) (?:...) | キャプチャグループと非キャプチャグループ |
\b | 単語境界。単語全体だけにマッチさせたいときの決め手 |
正規表現が書かれる場面
- フォームでのメールアドレス、電話番号、郵便番号、各種番号の検証。
- ログ行からのIPアドレス、ステータスコード、タイムスタンプ、ユーザーIDの抽出。
- コードベース全体の検索置換や、エディターの単純置換では処理できないリファクタリング。
- フレームワーク、Webサーバー、CDNにおけるURLルーティングとリダイレクト設定。
- スクレイピングやインポートで得たデータを、データベースへ入れる前に整えること。
- クライアント側でのパスワード構成ルールの適用。
いちばん時間を奪う間違い
- 貪欲な量指定子。
.*は行末まで進みます。.*?や[^"]*のような否定クラスで早めに止めます。 - エスケープ漏れ。文字としてのドット、プラス、疑問符、スラッシュには前にバックスラッシュが必要です。
gフラグの付け忘れ。最初の1件しか置換されない原因の定番です。- 破滅的バックトラッキング。
(a+)+のような入れ子の量指定子は、マッチしない長い入力で固まることがあります。 - 厳しすぎるメール用パターン。実在のアドレスにはプラス記号、ドット、国際文字が含まれます。検証は緩くし、確認メールで裏を取ります。
- HTMLを解析しようとすること。入れ子構造にはパーサーを使ってください。正規表現は開始タグと終了タグを数えられません。
正規表現の方言について
このテスターはブラウザーのJavaScriptエンジンを使います。パターンをWebページ、Node.js、JSONスキーマで動かすなら、これが正しい対象です。PCRE、Python、Go、PostgreSQLは、後読みの対応、名前付きグループの構文、Unicodeプロパティなどの細部が異なります。頼りにする前に、実際に動かす環境でパターンを試してください。
貼り付けた内容は送信されません
パターンもサンプルテキストもブラウザー内にとどまります。テストデータは実際のデータであることが多く、ログの抜粋、顧客レコード、実例のメールなどが他人のサーバーに残ってはいけないからです。
同じパターンをPython・Java・C#・PHP・Goで使う
ここで動いたパターンは、たいてい外側の書き方を変えるだけで他の言語に持っていけます。本当に厄介なのは、文字列リテラル内でのバックスラッシュのエスケープと、エンジンごとにどの機能があるかです。
| 言語 | 一致をテスト | 注意点 |
|---|---|---|
| Python | re.search(r'\d{4}', text) | raw文字列を使う。名前付きグループは (?P<name>...) |
| Java | Pattern.compile("\\d{4}").matcher(text).find() | バックスラッシュは二重に。matches() は文字列全体の一致が必要 |
| C# / .NET | Regex.IsMatch(text, @"\d{4}") | @ の逐語的文字列なら二重エスケープ不要 |
| PHP | preg_match('/\d{4}/', $text) | PCRE:区切り文字が必須。UTF-8には u を付ける |
| Go | regexp.MustCompile(`\d{4}`).MatchString(text) | RE2エンジン:後読みと後方参照は使えない |
関連ツール
パターンはたいてい、別の場所から来たテキストを扱います。ペイロードはJSON整形ツールで整え、エスケープされた値はURLデコードツールで戻し、トークンはJWTデコーダーで読み、抽出したエポック値はタイムスタンプ変換ツールで日付に変換できます。