Globパターンを正規表現に変換
globパターンを貼り付けると、対応する正規表現が得られます。*.jsは^.*\.js$になり、ドットはエスケープされるので本物のドットだけに一致します。角かっこや疑問符、バックスラッシュも変換します。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- パターン
- *.js
- 正規表現
- ^.*\.js$
- 正規表現の本体
- .*\.js
- ワイルドカード数
- 1
シェルのGlobパターンは、ファイル名フィルタの日常言語です。任意の文字列にはアスタリスク、1文字には疑問符、集合や範囲には角括弧クラスを使います。正規表現は別の、より密な構文であり、UIフィルタやテストハーネス、regexのみを受け付ける設定ファイルを繋ぐとき、開発者は忠実な翻訳をしばしば必要とします。このGlobパターンから正規表現への変換器はシェル形式のパターンを受け取り、文字ごとに一度だけ走査し、各ワイルドカードを対応する正規表現へ写し、正規表現では特殊になるリテラルをすべてエスケープし、安定したregex文字列と、断片を埋め込むときに使うアンカーなしの本体を返します。任意のパスモードはアスタリスクと疑問符がスラッシュを越えないようにし、セグメント単位の規則がfindや多くのシェルの振る舞いに合います。
シェルGlobが正規表現へどう写るか
シェルGlobはファイル名照合向けのコンパクトなパターン言語であり、全文解析向けではありません。アスタリスクは任意の文字列(空列を含む)に一致します。本変換器の既定写像は正規表現のドット・アスタリスク構文で、パスモードではアスタリスクをスラッシュを除く文字クラスとアスタリスク量指定子へ写し、1つのアスタリスクがディレクトリ区切りを飲み込めないようにします。
疑問符はちょうど1文字に一致し、既定モードは単一ドット、パスモードはスラッシュ以外1文字のクラスを使います。a-zやabcのような角括弧式は対応する正規表現の文字クラスになります。シェルの否定は開き括弧の直後の感嘆符を使い、本ツールはキャレット否定クラスへ書き換えるため、キャレット否定しか知らないエンジンでも動作します。
開き括弧直後のキャレットも否定として受け付けます。文字の前のバックスラッシュは、それがアスタリスクや疑問符、開き括弧でもリテラルとして扱わせます。
正規表現で特別な通常文字(ドット、プラス、丸括弧、波括弧、パイプ、キャレット、ドルなど)はすべてエスケープされるため、report.v2のようなファイル名断片が誤って「reportの後に任意1文字、その後v2」と解釈されません。
波括弧展開(波括弧aカンマb波括弧)はシェル前処理でありGlob照合ではないため、波括弧は交替グループにならず出力regexのリテラルのままです。
globを正規表現に変換すると便利な場面
フロントエンドの製品フィルタはユーザ向けのGlob(任意接尾辞のアスタリスク、単一プレースホルダの疑問符)から始まりがちですが、検索インデックスやデータベースは正規表現だけを受け付けます。エッジで変換すれば製品の言い回しは単純なまま、クエリエンジンは正確に保てます。
include/excludeのGlobを受け付けるテストスイートやCIスクリプトは、それらを一度regexオブジェクトにコンパイルし、シェル規則を場当たりに再実装せず何千回ものパス検査で再利用できます。セキュリティレビューやコード検索では、ルール変更を承認する前にレガシーGlobが正規表現で何を意味するかを示す必要が時々あります。
検証失敗は残高を消費しません。
活用例
Globで話すUIフィルタ、regexが要るエンジン
*.png や report-????.csv のような利用者向けパターンを受け取り、クライアント側またはサーバ側照合用のアンカー付き正規表現へコンパイルします。
ワイルドカード意味論の文書と教育
シェルGlobが正規表現になるとどうなるかを並べて示し、学習者がエスケープ、クラス、アンカーをはっきり見られるようにします。
よくある質問
どのワイルドカードに対応していますか?
任意列のアスタリスク(*)、1文字の疑問符(?)、角括弧クラス([abc]、[a-z]、否定の[!x]または[^x])、次文字のバックスラッシュエスケープです。波括弧展開はワイルドカードとして扱いません。
ファイル名のドットがエスケープされるのはなぜですか?
正規表現では、そのままのドットは任意の1文字を意味します。それではreport.v2が別の文字を挟んだ名前にも一致してしまうため、特殊な文字はすべてエスケープします。
パスモードで何が変わりますか?
パスモードでは、アスタリスクと疑問符がスラッシュを越えなくなります。1つのアスタリスクがフォルダの区切りまで飲み込まないので、findや多くのシェルと同じ動きになります。
{a,b}のような波かっこは展開されますか?
展開されません。波かっこはシェルが事前に行う処理で、globの一致規則ではないため、正規表現の中でも普通の文字として残ります。
先頭と末尾のアンカーなしで受け取れますか?
はい。初期設定では全体に一致するよう^と$で囲みますが、アンカーのない本体だけを受け取り、より大きなパターンに組み込むこともできます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/glob-to-regex \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pattern":"*.js"}'const res = await fetch("https://api.kit.forhosting.com/dev/glob-to-regex", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pattern": "*.js"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/glob-to-regex",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pattern": "*.js"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/glob-to-regex", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pattern":"*.js"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pattern":"*.js"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/glob-to-regex", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"pattern": "*.js"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.glob_to_regex",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
入力フィールド、応答形、失敗モード
任意の真偽値anchored(既定true)は完成した式をキャレットとドルで囲み、候補文字列全体に一致させます。大きなパターンに本体だけを埋め込むときはanchoredをfalseにしてください。文字クラスはPOSIXとシェルの慣例どおり、開きや否定記号の直後にリテラルの閉じ括弧を最初の要素として含められます。末尾の単独バックスラッシュは不完全エスケープではなくリテラルのバックスラッシュとして扱います。翻訳したいシェルGlobを含む必須文字列フィールドpattern(別名glob、pattern_glob、wildcard)を持つJSON本体を送信してください。任意の真偽値path_mode(既定false)はスラッシュを意識したアスタリスクと疑問符を有効にします。成功時、応答はpattern、path_mode、anchoredをエコーし、regexエンジンに渡せる完全な式regex、外側アンカーなしの同一翻訳regex_body、見つかったアスタリスク・疑問符・クラストークン数のwildcard_count、有効な写像を要約する短いformula文字列を返します。空のpattern、文字列でないpattern、2048文字を超えるパターン、未閉じの文字クラス、空クラス、z-aのような逆転範囲はinvalid_inputで失敗し課金されません。
Globから正規表現のAPIが役立つ場面
実装は純粋parseのtier Aのため、成功した各呼び出しはモデルトークンも外向きネットワークもなく公開の基本料金$0.002です。
連携の活用例
CIのincludeとexclude規則
プロジェクトのGlobをpath_modeの正規表現へ変換し、テストランナーやリンタがファイルごとにGlobを再解析せず同じセグメント単位規則を適用できるようにします。
技術的な質問
Globパターンを正規表現へどう変換しますか?
patternにシェルGlob(例: *.js)を入れたJSON本体をPOSTしてください。APIはregex(既定でアンカー付き)とregex_bodyを返します。*と?がスラッシュに一致してはいけない場合はpath_modeをtrueにしてください。
path_modeは何を変えますか?
path_modeがtrueのとき*は[^/]*、?は[^/]となり、どちらのワイルドカードもディレクトリ区切りを越えません。false(既定)ではスラッシュを含む任意文字に一致し得ます。
なぜinvalid_inputになりましたか?
よくある原因は、欠落または空のpattern、未閉じの'[...]'クラス、空クラス、括弧内の逆転範囲、文字列でないpattern、2048文字超のパターンです。これらの失敗は課金されません。
Globパターンから正規表現への変換の料金は?
ブラウザツールは無料です。API要求は成功した呼び出しごとに前払いKIT残高から$0.002です。無効な入力は課金されません。