正規表現の解説
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 つずつ説明
- ⚠️ 括弧の閉じ忘れ・文字クラスの閉じ忘れ・前に何も無い量詞は、説明でごまかさず指摘します
- よくある `/パターン/フラグ` の書き方に対応。パターンだけでも構いません
- 通信もモデルも使いません —— 説明はすべてパターン自身の構造から来ます
使い方
- 正規表現を貼り付けます(`/` で囲んでも、パターンだけでも可)
- 下の分解を読みます。インデントが入れ子の深さを表します
- フラグがあれば末尾に専用の節が出ます
- 実際に一致を試すには「正規表現テスト」をお使いください
よくある質問
- なぜ 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 回の実際の一致の代わりにはならず、結果だけではなぜそうなるかは分かりません。
関連ツール
正規表現テスト
テキストブラウザで正規表現をテスト:一致のハイライト、キャプチャグループ、置換プレビュー、バックトラック対策。JavaScript・Python・Java・Go・PHP のコード生成も。
正規表現コード生成
Web正規表現を JavaScript・Python・Java・Go・PHP・C# のコード片に変換します。焦点は各言語でバックスラッシュを正しく書くことです。
コード着色
Webコードに色を付け、選択コピーで色ごとスライドや Word に貼れます。インラインスタイルの HTML を出力してブログに貼ることも可能。26 言語に対応。
URL 解析
WebURL を解析し、スキーム・ホスト・ポート・パス・クエリパラメータ・アンカーに分解します。パラメータは元の値とデコード値を並記。すべてブラウザ内で処理します。
UA 解析
WebUser-Agent を解析し、ブラウザ・バージョン・OS・デバイス種別・エンジンを判定します。判定はパターン照合による概算です。すべてブラウザ内で処理します。
HTTP ステータスコード
WebHTTP ステータスコードの検索。番号から意味を、キーワードから番号を引けます。1xx〜5xx の分類・利用場面・確認のポイント付き。すべてブラウザ内で処理します。