MEDIUM: log-format: make the LF parser aware of sample expressions' end

For a very long time it used to be impossible to pass a closing square
bracket as a valid character in argument to a sample fetch function or
to a converter because the LF parser used to stop on the first such
character found and to pass what was between the first '[' and the first
']' to sample_parse_expr().

This patch addresses this by passing the whole string to sample_parse_expr()
which is the only one authoritative to indicate the first character that
does not belong to the expression. The LF parser then verifies it matches
a ']' or fails. As a result it is finally possible to write rules such as
the following, which is totally valid an unambigous :

    http-request redirect location %[url,regsub([.:/?-],!,g)]
                                                |-----| | |
                                                  arg1  | `---> arg3
                                                        `-----> arg2
                                         |-----------------|
                                              converter
                                     |---------------------|
                                        sample expression
                                   |------------------------|
                                         log-format tag
diff --git a/doc/configuration.txt b/doc/configuration.txt
index 8bf0506..392742e 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -14151,13 +14151,16 @@
   second level is usable for argument. It is recommended to use single quotes
   outside since these ones do not try to resolve backslashes nor dollar signs.
 
-  Example :
+  Examples:
 
      # de-duplicate "/" in header "x-path".
      # input:  x-path: /////a///b/c/xzxyz/
      # output: x-path: /a/b/c/xzxyz/
      http-request set-header x-path "%[hdr(x-path),regsub('/+','/','g')]"
 
+     # copy query string to x-query and drop all leading '?', ';' and '&'
+     http-request set-header x-query "%[query,regsub([?;&]*,'')]"
+
 capture-req(<id>)
   Capture the string entry in the request slot <id> and returns the entry as
   is. If the slot doesn't exist, the capture fails silently.