Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Regular expression cheat sheet for Varnish (.vcl). Examples of vcl regexp. Found here http://kly.no/varnish/regex.txt (by Kristian Lyngstøl)
Regular expression cheat sheet for Varnish
Varnish regular expressions are NOT case sensitive. Varnish uses POSIX
regular expressions, for a complete guide, see: "man 7 regex"
Basic matching:
req.url ~ "searchterm"
True if req.url contains "searchterm" anywhere.
req.url == "searchterm"
True if req.url is EXACTLY searchterm
Matching at the beginning or end of a string
req.http.host ~ "^www."
True if req.http.host starts with "www" followed by any single
character.
req.http.host ~ "^www\."
True if req.http.host starts with "www.". Notice that . was
escaped.
req.url ~ "\.jpg$"
True if req.url ends with ".jpg"
Multiple matches
req.url ~ "\.(jpg|jpeg|css|js)$"
True if req.url ends with either "jpg", "jpeg", "css" or "js".
Matching with wildcards
req.url ~ "jp.g$"
True if req.url ends with "jpeg", "jpag", "jp$g" and so on, but NOT
true if it ends with "jpg".
req.url ~ "jp.*g$"
True if req.url ends with "jpg", "jpeg", "jpeeeeeeeg",
"jpasfasf@@!!g" and so forth (jp followed by 0 or more random
characters ending with the letter 'g').
Conditional matches
req.url ~ "\.phg(\?.*)?$"
True if req.url ends with ".php" ".php?foo=bar" or ".php?", but not
".phpa". Meaning: Either it ends with just ".php" or ".php"
followed by a question mark any any number of characters.
req.url ~ "\.[abc]foo$"
True if req.url ends with either ".afoo" ".bfoo" or ".cfoo".
req.url ~ "\.[a-c]foo$"
Same as above.
Replacing content
set req.http.host = regsub(req.http.host, "^www\.","");
Replaces a leading "www." in the Host-header with a blank, if
present.
set req.http.x-dummy = regsub(req.http.host, "^www.","leading-3w.");
Sets the x-dummy header to contain the host-header, but replaces
a leading "www." with "leading-3w" example:
Host: www.example.com =>
Host: www.example.com
X-Dummy: leading-3w.example.com
Host: example.com =>
Host: example.com
X-Dummy: example.com
@cronnelly

This comment has been minimized.

Copy link

commented Oct 2, 2014

Varnish regular expressions are case sensitive.

@trongrg

This comment has been minimized.

Copy link

commented Nov 13, 2014

Varnish regular expressions are NOT case sensitive

https://www.varnish-cache.org/docs/3.0/reference/vcl.html

Regular Expressions

Varnish uses PCRE - Perl-compatible regular expressions. For a complete description of PCRE please see the pcre(3) man page.

To send flags to the PCRE engine, such as to turn on case insensitivity add the flag within parens following a question mark, like this:

If host is NOT example dot com..

if (req.http.host !~ "(?i)example.com$") {
...
}

@perbu

This comment has been minimized.

Copy link

commented Nov 15, 2015

This is out of date. It should be removed.

@ramonfincken

This comment has been minimized.

Copy link

commented Mar 15, 2016

Source: https://kly.no/varnish/regex.txt
Stating:

WARNING WARNING WARNING

This document was written years ago, for Varnish version 2.0.

Varnish has SWITCHED regex engine from posix regex to pcre, and is now case
sensitve. There are also numerous other changes. The basic principles still
hold true, but you are probably better off using official documentation
instead of something I wrote during a lunch break for participants of a
Varnish training course back in 2011.

WARNING WARNING WARNING

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.