Regex Tester
正規表現テスターについて
この正規表現テスターは、プログラマーや開発者向けの無料オンラインツールです。正規表現(Regular Expression)のテストとデバッグをリアルタイムで行うことができます。
主な機能
- リアルタイムマッチング:入力と同時にマッチング結果を表示
- 複数マッチの表示:グローバルフラグ(g)を使用した複数マッチの検出
- 大文字小文字の区別:大文字小文字を区別しないマッチング(iフラグ)
- 複数行マッチング:複数行にまたがるマッチング(mフラグ)
- グループマッチング:キャプチャグループの表示と管理
よく使う正規表現パターン
- メールアドレス:
^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ - URL:
^https?://[A-Za-z0-9.-]+\.[A-Za-z]{2,}(/\S*)?$ - 電話番号:
^\d{2,4}-\d{2,4}-\d{4}$ - 郵便番号:
^\d{3}-\d{4}$ - IPアドレス:
^(\d{1,3}\.){3}\d{1,3}$
正規表現の基本
正規表現は、テキストパターンの検索や置換に使用される強力なツールです。以下の基本的な要素を組み合わせて使用します:
- 文字クラス:
[abc](a、b、cのいずれか) - 量指定子:
*(0回以上)、+(1回以上)、?(0回または1回) - アンカー:
^(行頭)、$(行末) - エスケープ:
\(特殊文字のエスケープ)
使用例
このツールは以下のような場面で特に役立ちます:
- フォームのバリデーション(メールアドレス、電話番号、URLなど)
- ログファイルからの特定パターンの抽出
- テキストエディタでの検索と置換
- プログラミングコードのリファクタリング
- データクリーニングと整形
パフォーマンスの最適化
正規表現のパフォーマンスを最適化するためのポイント:
- 非貪欲マッチング(?)の適切な使用
- キャプチャグループの最小限の使用
- アンカーの適切な配置
- 文字クラスの最適化
よくある質問
キャプチャグループとは何ですか?
キャプチャグループは括弧 () で囲まれた部分で、マッチ全体だけでなく一部分を抽出できる機能です。例: `(\d+)-(\d+)` というパターンに `123-456` を当てると、グループ1が "123"、グループ2が "456" として取得できます。JavaScriptでは `match[1]`, `match[2]` でアクセスでき、`(?:...)` を使うと「キャプチャしないグループ」になります。
フラグ(g、i、m、s、u)の役割は何ですか?
g(グローバル)は文字列内の全てのマッチを探索、i(大文字小文字区別なし)は A と a を同一視、m(複数行)は ^ と $ を各行の先頭・末尾にマッチさせる、s(dotAll)は `.` が改行にもマッチ、u(Unicode)はサロゲートペアなどの拡張Unicodeを扱う、フラグです。複数組み合わせ可能(例: `gi`)。
メールアドレス検証の正規表現は?
実用的なシンプル版は `^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$` です。RFC 5322 完全準拠の正規表現は数百文字に及び、現実には実用的でないため、フォーム検証では HTML5 の `<input type="email">` か、ライブラリ(validator.js等)の使用が推奨されます。最終的な検証は「実際にメールを送信してリンクをクリック」が最も確実です。
ドット(.)が改行にマッチしないのはなぜですか?
JavaScript正規表現のデフォルトでは、ドット(.)は「改行を除く任意の文字」を意味します。改行も含めてマッチさせたい場合は、(1) `s` フラグを付ける(ES2018以降)、(2) 古いブラウザでは `[\s\S]`(空白文字と非空白文字 = 全文字)を使う、のいずれかが必要です。
\b と ^ の違いは何ですか?
`\b` は「単語境界」にマッチし、英数字とそれ以外の文字の境目(空白・記号・改行・文字列端)に挿入されるゼロ幅マッチです。例: `\bword\b` は "a word." の word にマッチしますが "subword" にはマッチしません。一方 `^` は「文字列または行の先頭」のみで、単語の境目とは無関係です。
貪欲マッチ(greedy)と非貪欲(lazy)の違いは?
`*` `+` `?` `{n,m}` は標準では「貪欲マッチ」で、可能な限り長い文字列にマッチします。例: `<.+>` を `<a><b>` に当てると `<a><b>` 全体にマッチしてしまいます。`?` を後ろに付けて非貪欲(lazy)にすると `<.+?>` となり、最短の `<a>` にだけマッチします。HTMLタグ抽出など「最短マッチ」が必要な場合に便利です。
正規表現で日本語を扱うには?
日本語の文字クラスは Unicode プロパティで指定できます。ひらがな: `\p{Script=Hiragana}`、カタカナ: `\p{Script=Katakana}`、漢字: `\p{Script=Han}`(uフラグが必要)。簡易的には `[ぁ-んー]`、`[ァ-ヶー]`、`[一-龯]` などのコードポイント範囲指定も可能ですが、Unicodeプロパティの方が網羅的で正確です。
本ツールの結果と実装言語の結果が違うのですが?
本ツールはJavaScriptの正規表現エンジン(V8)を使用しています。Python (re)、Ruby (Onigmo)、PHP (PCRE)、Java、Go それぞれ実装が異なるため、`(?P<name>...)` 形式の名前付きグループ、ルックビハインドの可変長サポート、所有量化子(`*+`)等で差異が出ます。Webフロントエンド用途であれば本ツールの結果がそのまま使えます。