Skip to content

Instantly share code, notes, and snippets.

@jdeagle
Forked from dimsemenov/vcl-regex-cheat-sheet
Created February 12, 2016 19:56
Show Gist options
  • Save jdeagle/fd8013e3b406b3b647c4 to your computer and use it in GitHub Desktop.
Save jdeagle/fd8013e3b406b3b647c4 to your computer and use it in GitHub Desktop.

Revisions

  1. @dimsemenov dimsemenov renamed this gist Apr 8, 2014. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. @dimsemenov dimsemenov created this gist Apr 8, 2014.
    66 changes: 66 additions & 0 deletions vcl-regex-cheatsheet
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,66 @@
    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