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フロントエンド用途であれば本ツールの結果がそのまま使えます。