- 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
では、gif
が req.url.ext
に含まれます。
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
に0個以上のランダムな文字が続いて g
で終わる場合に一致します (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
ヘッダーに host-header を格納しますが、先頭の 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 のプライバシーポリシーと利用規約が適用されます。