URI Grammar

uri‑reference absolute‑uri | relative‑ref
absolute‑uri scheme colon hier‑part (quest query)? (hash fragment)?
scheme scheme‑char+
scheme‑char alpha | digit | dash | plus | dot
hier‑part slash slash authority path‑abempty | path‑absolute | path‑rootless | path‑empty
relative‑ref relative‑part (quest query)? (hash fragment)?
relative‑part slash slash authority path‑abempty | path‑absolute | path‑noscheme | path‑empty
authority (user‑info at)? host (colon port)?
user‑info (unreserved | pct‑encoded | sub‑delims | colon)*
host ip‑literal | ipv4‑address | reg‑name
ip‑literal lbracket (ipv6‑address | ipv‑future) rbracket
ipv4‑address digit+ dot digit+ dot digit+ dot digit+
ipv6‑address ipv6‑char+
ipv6‑char digit | hx | colon | dot | slash
ipv‑future alpha (digit | hx)+ dot (unreserved | sub‑delims | colon)+
port digit*
reg‑name (unreserved | pct‑encoded | sub‑delims)*
path‑abempty (slash segment)*
path‑absolute slash segment‑nz (slash segment)*
path‑noscheme segment‑nz‑nc (slash segment)*
path‑rootless segment‑nz (slash segment)*
path‑empty <empty>
segment pchar*
segment‑nz pchar+
segment‑nz‑nc (unreserved | pct‑encoded | sub‑delims | at)+
query (pchar | slash | quest)*
fragment (pchar | slash | quest)*
pchar unreserved | pct‑encoded | sub‑delims | colon | at
unreserved alpha | hx | digit | dot | dash | underscore | tilde
reserved gen‑delims | sub‑delims
gen‑delims colon | slash | quest | hash | lbracket | rbracket | at
sub‑delims exclamation | dollar | amp | sq | lparen | rparen | asterisk | plus | comma | semicolon | eq
pct‑encoded percent hex hex
hex digit | hx