code: @Nullable
    public ImmutableMap<String, String> match(String path) {
      return match(path, false);
    }
docs: Matches the path, returning a map from variable names to matched values. All matched values
  will be properly unescaped using URL encoding rules. If the path does not match the template,
  null is returned.
  
  <p>If the path starts with '//', the first segment will be interpreted as a host name and
  stored in the variable {@link #HOSTNAME_VAR}.
  
  <p>See the {@link PathTemplate} class documentation for examples.
  
  <p>For free wildcards in the template, the matching process creates variables named '$n', where
  'n' is the wildcard's position in the template (starting at n=0). For example: <pre>
  PathTemplate template = PathTemplate.create("shelves/*&#47;books/*");
  assert template.match("shelves/s1/books/b2")
  .equals(ImmutableMap.of("$0", "s1", "$1", "b1"));
  assert template.match("//somewhere.io/shelves/s1/books/b2")
  .equals(ImmutableMap.of(HOSTNAME_VAR, "//somewhere.io", "$0", "s1", "$1", "b1"));
  </pre>
  
  All matched values will be properly unescaped using URL encoding rules (so long as URL encoding
  has not been disabled by the {@link #createWithoutUrlEncoding} method).