正規表現パターンを分かりやすく解説
正規表現の各部分が何をしているかが分かります。サンプルのメールアドレス用の式は16の部分に分けて説明され、キャプチャグループは3つで、最初のものは user という名前です。各部分に位置と説明が付きます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- フラグ
- i
- フレーバー
- ECMAScript
- キャプチャグループ
- 3
正規表現は一行に収まる短さでも、複数の独立した規則を内包していることがあります。このツールはECMAScriptパターンを検証し、左から右へ解析して、グループ、量指定子、文字クラス、アンカー、エスケープ、選択、ワイルドカード、リテラル文字列を識別します。各要素には位置、入れ子の深さ、平易な説明が付くため、パターンを変更したり個人データに適用したりせずに、レビュー、学習、文書化、デバッグを行えます。
パターンの順番どおりに説明を読みます
最初にcomponents配列をご覧ください。ここには、元のパターンが左から右へ並ぶ順番のまま各要素が収録されています。各項目は種類と元のtokenを示し、0から始まるindexとtokenの長さも返します。
この位置情報により、長い式でも、どの括弧や疑問符について説明しているのかを推測せず、該当する文字へ正確に対応付けられます。depthは、入れ子になったグループ内での深さを表します。グループの開始と終了が別々に示されるため構造が明確になり、キャプチャグループには開き括弧の順番で番号が付きます。
名前付きキャプチャでは、その名前も維持されます。通常の文字列は、可能な限り一文字ずつ分断せず連続したまとまりとして表示されるので、読みやすさが保たれます。まず順番に読み、その後で件数を確認すると、深い入れ子や多数の選択肢など、重点的に調べる構造を見つけやすくなります。
グループ、文字クラス、繰り返しを理解します
グループは式を構造化し、必要に応じて後から利用する文字列をキャプチャします。通常の開き括弧は番号付きキャプチャを開始し、疑問符とコロンの組み合わせは非キャプチャグループを開始します。名前付きキャプチャには宣言された名前が表示されます。
先読みと後読みは、周辺の文字を消費せずに条件を確認するため、ほかのグループと区別して説明されます。文字クラスは一覧内の一文字に一致するものとして示され、否定クラスは明記されます。AからZのような単純な範囲も要約されます。
エスケープについては、数字、単語構成文字、空白、境界、後方参照、Unicodeプロパティ、符号化文字など、一般的な種類を説明します。量指定子は直前の要素に作用します。アスタリスクは0回以上、プラスは1回以上、疑問符は0回または1回、波括弧は正確な回数、最小回数、または範囲を表します。
末尾の疑問符によって最短一致になる場合は、できるだけ少ない繰り返しを優先することも明示されます。
構文を検証し、正規表現の種類を確認します
説明を返す前に、ECMAScriptの正規表現エンジンでパターンを検証します。正規表現には方言ごとの差があるため、この確認は重要です。PCRE、Python、Java、.
NETからコピーした構文はJavaScriptで意味が異なる場合があり、使用できないこともあります。patternには両端のスラッシュを含めず、式の本体だけを入力してください。コンパイルできることは確認できますが、業務上期待するデータに一致すること、あらゆる入力で高速なこと、過度なバックトラッキングが起きないことまで保証するものではありません。
説明で構造を確認した後、一致すべき例と一致すべきでない例を正規表現テスターで検証してください。このアルゴリズムは決定的で、ネットワークや対象テキストを使わないため、同じパターンとフラグから常に同じ構造化された説明が得られます。
活用例
引き継いだ式をレビュー
既存コード内の複雑なパターンを、変更前に理解しやすい構成要素の一覧へ変換します。
入力検証ルールを文書化
フォームやサービスで使うグループ、許可文字、アンカー、繰り返し規則を構造化して記録します。
正規表現の構文を学習
ECMAScriptパターンを学びながら、元のtokenと簡潔な説明、ソース位置を比較できます。
よくある質問
どの種類の正規表現を解説しますか?
JavaScriptのRegExpで使われるECMAScript正規表現を検証し、解説します。
入力した文章に対してパターンをテストしますか?
いいえ。 構文だけを説明し、対象文章は必要ありません。一致結果は別途、正規表現テスターでご確認ください。
名前付きと番号付きのキャプチャを識別できますか?
はい。 開き括弧の順に番号を付け、名前付きグループには宣言された名前も表示します。
式を囲むスラッシュも入力しますか?
いいえ。スラッシュを除いた式の本体だけを入力し、大文字と小文字を区別しない i などのオプションは別に指定します。無効なオプションや重複したオプションは、分かりやすいメッセージとともに拒否されます。
繰り返しの後の疑問符は何を意味しますか?
繰り返しを控えめにし、できるだけ少ない回数を優先させます。説明にもそのことがはっきり書かれます。要素の直後に単独で置いた疑問符は、その要素を省略可能にするだけです。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev2/regex-explain \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pattern":"^(?<user>[A-Za-z0-9._%+-]+)@([A-Za-z0-9.-]+)\\.([A-Za-z]{2,})$"}'const res = await fetch("https://api.kit.forhosting.com/dev2/regex-explain", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pattern": "^(?<user>[A-Za-z0-9._%+-]+)@([A-Za-z0-9.-]+)\\.([A-Za-z]{2,})$"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/regex-explain",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pattern": "^(?<user>[A-Za-z0-9._%+-]+)@([A-Za-z0-9.-]+)\\.([A-Za-z]{2,})$"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/regex-explain", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pattern":"^(?<user>[A-Za-z0-9._%+-]+)@([A-Za-z0-9.-]+)\\\\.([A-Za-z]{2,})$"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pattern":"^(?<user>[A-Za-z0-9._%+-]+)@([A-Za-z0-9.-]+)\\.([A-Za-z]{2,})$"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/regex-explain", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"pattern": "^(?<user>[A-Za-z0-9._%+-]+)@([A-Za-z0-9.-]+)\\.([A-Za-z]{2,})$"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.regex_explain",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_pattern_chars | 2000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
パターンの順番どおりに説明を読みます
summaryで概要をつかみ、component_countsを自動文書化や検査レポートに利用できます。
構文を検証し、正規表現の種類を確認します
任意のJavaScriptフラグはflagsフィールドへ分けて入力します。不正な構文、未対応のフラグ、重複したフラグは、部分的で誤解を招く説明ではなく、型付きのinvalid_inputエラーになります。
技術的な質問
両端のスラッシュも入力しますか?
いいえ。patternには式の本体だけを入力し、iやmなどのフラグはflagsフィールドへ入力してください。
正規表現が不正な場合はどうなりますか?
コンパイル上の問題を含むinvalid_inputエラーを返します。途中までの説明は返しません。
APIリクエストの料金はいくらですか?
APIの基本料金は1リクエストあたり$0.002です。同じ決定的なロジックをブラウザでも実行できます。