jarrettbarnett
3/21/2017 - 6:44 PM

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 (.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