正規表現テスター
正規表現(regex)はテストをマッチングするためのパターンです。このツールはregex構文を分析し、パターンの構成要素を説明し、サンプルテキストに対してマッチングを試すテストエリアを提供します。JavaScript、PCRE、Python のregex形式をサポートしています。
仕様
よくあるユースケース
- regexが期待するテキストにマッチしない理由をデバッグ
- 説明を見てregex構文を学習
- コードに追加する前にパターンをテスト
- フォームフィールドの入力パターンを検証
- 構造化テキスト(ログ、CSV、HTML)からデータを抽出
機能
- regex形式の検出(JavaScript /pattern/flags、PCRE #pattern#、Python r"pattern")
- パターンの構成要素をわかりやすい言葉で説明
- マッチのハイライト付きでサンプルテキストに対してテスト
- 単一マッチまたは全マッチ検索モード
- キャプチャグループとその内容を表示
- 名前付きキャプチャグループの表示
- マッチ位置とインデックスの表示
- regex実行時間の表示
- パターン機能バッジ(アンカー、量指定子など)
- パターン警告
- 一般的なパターンライブラリ(メール、URL、電話番号など)
例
ヒント
- 本番環境で使用する前に、オンラインテスターで複雑なパターンをデバッグしましょう。
- 特殊文字(. ^ $ * + ? { } [ ] \ | ( ))はバックスラッシュでエスケープしてください。
- 名前付きキャプチャグループ (?<name>...) はマッチ結果をより読みやすくします。
- gフラグはすべてのマッチを見つけます。なしの場合、最初のマッチのみが返されます。
- 貪欲な量指定子(* +)に注意してください。必要に応じて非貪欲な(*? +?)を使用しましょう。
解説 正規表現テスター
正規表現(regex)は、事実上すべてのプログラミング言語、テキストエディタ、コマンドラインツールで使用されるパターンマッチング言語です。regexはリテラル文字とメタ文字の組み合わせを使用して、文字列のクラスにマッチする検索パターンを定義します。入力検証、テキスト抽出、検索置換操作、ログ分析に不可欠です。
コア構文にはキャラクタクラス([a-z]、\\d、\\w、\\s)、量指定子(*、+、?、{n,m})、アンカー(^、$、\\b)、選択(|)、括弧によるグルーピングが含まれます。キャプチャグループはマッチしたサブストリングを抽出し、後方参照を可能にします。先読み (?=...) と後読み (?<=...) は文字を消費せずに位置をマッチングし、周囲のコンテキストに関する複雑なアサーションを可能にします。
JavaScript regexには固有のフレーバーがあり、特定のフラグがあります:g(グローバル)、i(大文字小文字を区別しない)、m(マルチライン)、s(dotAll)、u(Unicode)、y(スティッキー)。uフラグはUnicodeテキストを正しく処理するためにますます重要になっています。なしではパターンがマルチバイト文字を正しくマッチできない場合があります。名前付きキャプチャグループ (?<name>...) は番号付きグループよりも可読性を向上させます。
一般的なregexタスクには、メール検証、URLパース、構造化テキスト(ログファイル、CSV)からのデータ抽出、コードリファクタリングでのパターン置換が含まれます。ただし、regexには限界があります。HTMLやJSONのようなネストされた構造を解析することはできません(適切なパーサーを使用してください)。また、過度に複雑なパターンは読みにくく、保守が困難になります。「今度は2つの問題がある」というジョークは、複雑なregexの実際の保守における課題を反映しています。
HTMLはネストされた構造を持つ文脈自由言語であり、正規表現では根本的に処理できません。regexは任意のネスト深度を持つ開始タグと終了タグを正しくマッチングできません。単純なケースは動作するように見えても、ネストされたタグ、>を含む属性、コメントを含むエッジケースで失敗します。HTML処理には、ブラウザのDOMParser、Node.jsのcheerio、PythonのBeautifulSoupなどのDOMパーサーを使用してください。
.*(貪欲)と .*?(非貪欲)量指定子の違いは、マッチング動作にとって重要です。貪欲な .* はできるだけ多くの文字にマッチし、必要に応じてバックトラックします。非貪欲な .*? はできるだけ少ない文字にマッチします。"<b>一</b><b>二</b>" のような文字列では、貪欲パターン <b>.*</b> は文字列全体にマッチしますが、非貪欲パターン <b>.*?</b> は最初の "<b>一</b>" のみにマッチします。間違ったモードを選択することは、予期しないregex動作の最も一般的な原因の1つです。
JavaScriptでは、uフラグ(/pattern/u)がUnicode対応マッチングを有効にします。なしでは、メタ文字 . は基本多言語面外の文字(絵文字など)にマッチせず、\\w はASCIIの単語文字のみにマッチします。uフラグにより量指定子とキャラクタクラスがサロゲートペアを正しく処理し、\\p{Letter} のようなUnicodeプロパティエスケープが使えるようになります。先読み (?=...) と後読み (?<=...) はゼロ幅アサーションで、位置でパターンをチェックしますがマッチには含みません。肯定先読み (?=...) は後に何が続くべきかを主張し、否定先読み (?!...) は後に何が続いてはならないかを主張します。例えば、\\d+(?= dollars) は " dollars" が後に続く数値にマッチしますが、数値自体のみをキャプチャします。後読みも同様に機能しますが、前のテキストをチェックします。