- English
- 日本語
VCL 正規表現早見表
最終更新日 2018-08-02
Fastly VCL は Perl 互換の正規表現 (Perl Compatible Regular Expression - PCRE) 構文を利用しています。大文字小文字は区別され、スラッシュ (/) はエスケープする必要はありません。正規表現記述の最初に (?i)
を含めることで大文字小文字を区別しないように指定することも可能です。
基本的なマッチ
req.url == "/phrase"
req.url
が /phrase
に完全一致する場合のみマッチします。
req.url ~ "phrase"
どこでも phrase
ならマッチします。
文字列の最初または最後のマッチ
req.http.host ~ "^www"
req.http.host
が www
で始まる場合にマッチします。
req.url ~ "\.jpg$"
req.url
が .jpg
で終了する場合にマッチします。
複数のマッチ条件
req.url ~ "\.(png|jpg|css|js)$"
req.url
が .png
、.jpg
、.css
、または .js
で終わる場合にマッチします。
req.url ~ "\.php(\?.*)?$"
req.url
が .php
、.php?foo=bar
、または .php?
で終わる場合にマッチします。.phpa
の場合はマッチしません。
注意
また、req.url.ext
を使って URL で指定されたファイル拡張子を見つけることも可能です。例えば、リクエスト www.example.com/1/hello.gif?foo=bar
では 、req.url.ext
に gif
が含まれます。
req.url ~ "\.[abc]server$"
req.url
が .aserver
、.bserver
、または .cserver
で終わる場合にマッチします。
ワイルドカードマッチ
req.url ~ "jp.g$"
req.url
が jpeg
、jpag
、jp0g
で終わる場合にマッチしますが、req.url
が jpg
で終わる場合にはマッチしません。また、他の文字が jp
と g
の間にある場合にもマッチします。
req.url ~ "jp.*g$"
jp
に続いて g
で終わる0個以上のランダムな文字にマッチします (jpeg
、jpg
、jpeeeeg
がすべてマッチします)。
マッチ内容の取得
1set req.http.Foo = "abbbccccc";2if (req.http.Foo ~ "^(a+)(b+)(c+)") {3 set resp.http.match0 = re.group.0; # now equals 'abbbccccc'4 set resp.http.match1 = re.group.1; # now equals 'a'5 set resp.http.match2 = re.group.2; # now equals 'bbb'6 set resp.http.match3 = re.group.3; # now equals 'cccccc'7}
re.group.[0-9]
オブジェクトを利用すると、マッチした内容を取得できます。re.group.0
オブジェクトは、取得グループが指定されていなくても、マッチした文字列全体として評価されます。これらのオブジェクトを使って次のような置換を行うこともできます。
1if (req.url ~ "(?i)\?.*some_query_arg=([^&]*)") {2 set req.http.Thing-I-Want = regsub(req.url, "(?i)\?.*some_query_arg=([^&]*).*", "\1");3}
re.group
を使用すると前の例を大幅に簡素化できます。
1if (req.url ~ "(?i)\?.*some_query_arg=([^&]*)") {2 set req.http.Thing-I-Want = re.group.1;3}
次のようなコードでも同じ処理を実施することが可能です。
set req.http.Thing-I-Want = if(req.url ~ "(?i)\?.*some_query_arg=([^&]*)", re.group.1, "");
コンテンツの置き換え
set req.http.host = regsub(req.http.host, "^www\.","");
ホストに先行する www.
がある場合は、削除します。
set req.http.api-test = regsub(req.http.host, "^www\.","api.");
api-test
ヘッダーにホストヘッダーを格納しますが、先行する www.
を api.
に置き換えます。
1Host: www.example.com ->2Host: www.example.com3api-test: api.example.com4Host: example.com ->5Host: example.com6api-test: example.com
set req.url = regsuball(req.url, "/+", "/");
URL 中で連続するすべてのスラッシュをひとつのスラッシュで置き換えます。例えば //docs///intro.html
は /docs/intro.html
に変換されます。
翻訳についての注意事項
このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシーと利用規約が適用されます。