VCL 正規表現早見表

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.hostwww で始まる場合にマッチします。

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=barreq.url.extgifに含まれます。

req.url ~ "\.[abc]server$"

req.url.aserver.bserver、または .cserver で終わる場合にマッチします。

ワイルドカードマッチ

req.url ~ "jp.g$"

req.urljpegjpagjp0g で終わる場合にマッチしますが、req.urljpg で終わる場合にはマッチしません。また、他の文字が jpg の間にある場合にもマッチします。

req.url ~ "jp.*g$"

jp に続いて g で終わる0個以上のランダムな文字にマッチします (jpegjpgjpeeeeg がすべてマッチします)。

マッチ内容の取得

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.com
3api-test: api.example.com
4Host: example.com ->
5Host: example.com
6api-test: example.com
set req.url = regsuball(req.url, "/+", "/");

URL 中で連続するすべてのスラッシュをひとつのスラッシュで置き換えます。例えば //docs///intro.html/docs/intro.html に変換されます。


翻訳についての注意事項
このガイドは役に立ちましたか?

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。