In RFC 3986:
//URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
reserved = gen-delims / sub-delims
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
percent-encoded = "%" HEXDIG HEXDIG
pchar = unreserved / percent-encoded / sub-delims / ":" / "@"
query = *( pchar / "/" / "?" ) // "?" query
fragment = *( pchar / "/" / "?" ) //"#" fragment