piapia123
ja

正規表現の解説

Web

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

正規表現を部分ごとに分解し、それぞれが実際に何に一致するかを添えます。他人の正規表現を読むときに難しいのは文法ではなく、その部分が何のためのものかを誰も教えてくれないことです。読めない一行は、たいてい文字クラス 3 つとアサーション 2 つの組み合わせです。 これはパーサーが読み取ったもので、「モデルに説明させる」ものではありません。 正規表現の意味は 1 つに定まりますが、モデルが間違えたとき確認する手段がありません —— 同じ自信のある口調で「`*` は 1 回以上です」と言い、その説明でコードを直せば余計に混乱します。パーサーなら間違えればテストが落ちます(このモジュールには 44 件のアサーションがあります)が、モデルは落ちません。 意図的に明示している点が 3 つあります: · 量詞はそれが修飾するものに貼り付きます。 `ab*` の `*` が修飾するのは `b` であり `ab` ではありません。したがって出力は「a」「b*」の 2 行になり、3 つの記号に分解したりはしません —— 分解すると肝心の関係が見えなくなるからです · 文字クラス内のメタ文字は展開しません。 `[.*]` の `.` と `*` はその 2 文字そのもので、「任意の文字」と「量詞」ではありません。正規表現で最も多い誤解なので、展開せずに明言します · 量詞の前に何も無い場合は明確に指摘します。 `*abc` は多くのエンジンで構文エラーです。黙って文字として扱うと `*` に一致すると誤解します ⚠️ この正規表現が正しいか、速いかは判断しません —— それは「正規表現テスト」で実際に走らせてください。ここは「何と書いてあるか」に答えるだけです。

機能

  • 各部分を、何に一致するかと共に列挙。括弧の階層でインデントします
  • 量詞は修飾する要素と同じ行に(`a*` は 1 行で、2 行ではありません)
  • 文字クラスを言葉に展開:`[a-z0-9_]` は各区間と文字を列挙。否定形も説明します
  • ⚠️ 文字クラス内のメタ文字は展開しません —— `[.*]` の 2 つは文字そのものです
  • グループを種類ごとに:キャプチャ・名前付き・非キャプチャ・先読み・後読み
  • 略号クラス(`\d` `\w` `\s` `\b`)、制御文字、後方参照(番号と名前)、Unicode プロパティ(`\p{…}`)に対応
  • フラグ(`g` `i` `m` `s` `u` `y` `d` `v`)を 1 つずつ説明
  • ⚠️ 括弧の閉じ忘れ・文字クラスの閉じ忘れ・前に何も無い量詞は、説明でごまかさず指摘します
  • よくある `/パターン/フラグ` の書き方に対応。パターンだけでも構いません
  • 通信もモデルも使いません —— 説明はすべてパターン自身の構造から来ます

使い方

  1. 正規表現を貼り付けます(`/` で囲んでも、パターンだけでも可)
  2. 下の分解を読みます。インデントが入れ子の深さを表します
  3. フラグがあれば末尾に専用の節が出ます
  4. 実際に一致を試すには「正規表現テスト」をお使いください

よくある質問

なぜ AI に正規表現を説明させないのですか?
その説明を確認する手段が無いからです。 正規表現の意味は 1 つに定まりますが、間違えるモデルは同じ自信で語ります —— 「`*` は 1 回以上」という説明は、既に知っている人以外には見抜けず、それに従ってコードを直せば悪化します。パーサーは違います:1 文字読んで 1 文を出すので、間違えればテストが即座に落ち(このモジュールは 44 件のアサーションで守られています)、同じパターンならどこでも同じ説明になります。解説器にできる仕事をモデルに渡す理由はありません。
`ab*` の `*` は b に掛かるのですか、ab ですか?
b です。 量詞は直前の 1 要素にのみ作用します —— `ab*` は「a の後に b が 0 個以上」に一致します。ペア全体を繰り返すには `(ab)*` と書く必要があります。初心者が最も間違えやすい点なので、ここでは量詞を修飾する要素と同じ行に置きます(`a` の行、`b*` の行)。`a` `b` `*` の 3 記号に分解すると、どれがどれを修飾するのか見えなくなるからです。
`[.*]` の中の点と星はどういう意味ですか?
その 2 文字そのものです。 文字クラス(角括弧)の中では、`.` は「任意の文字」ではなく、`*` も量詞ではなく、ただの要素です —— `[.*]` は「点 1 つ、または星 1 つ」に一致します。正規表現で最も多い誤解の 1 つなので、ここでは意図的に展開せず、文字そのものであると明言します。
「正規表現テスト」との違いは?
役割分担は明確です:こちらは「何を意味するか」、あちらは「実際に何に一致するか」に答えます。他人のパターンを読むときや自分の論理を確認するときはこちら、あるテキストが一致するか・キャプチャグループが何を捕まえたかを知りたいときはあちらです(置換プレビューや ReDoS リスクの検査も行います)。互いの代わりにはなりません:どんなに明快な説明も 1 回の実際の一致の代わりにはならず、結果だけではなぜそうなるかは分かりません。

関連ツール