一个表示 url的 bnf范式规范
<url> ::= <scheme> ":" <hier_part> | <scheme> ":" <hier_part> "?" <query> | <scheme> ":" <hier_part> "#" <fragment> | <scheme> ":" <hier_part> "?" <query> "#" <fragment>
<scheme> ::= <ALPHA> <scheme_tail> | <ALPHA>
<scheme_tail> ::= <scheme_char> <scheme_tail> | <scheme_char>
<scheme_char> ::= <ALPHA> | <DIGIT> | "+" | "-" | "."
<hier_part> ::= "//" <authority> <path_abempty> | <path_absolute> | <path_rootless> | <path_empty>
<authority> ::= <userinfo> "@" <host> ":" <port> | <userinfo> "@" <host> | <host> ":" <port> | <host>
<userinfo> ::= <userinfo_char> <userinfo> | <userinfo_char>
<userinfo_char> ::= <unreserved> | <pct_encoded> | <sub_delims> | ":"
<host> ::= <IP_literal> | <IPv4address> | <reg_name>
<IP_literal> ::= "[" <IPv6address> "]"
<IPv6address> ::= <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16>
<h16> ::= <HEXDIG> | <HEXDIG> <HEXDIG> | <HEXDIG> <HEXDIG> <HEXDIG> | <HEXDIG> <HEXDIG> <HEXDIG> <HEXDIG>
<IPv4address> ::= <dec_octet> "." <dec_octet> "." <dec_octet> "." <dec_octet>
<dec_octet> ::= <DIGIT> | <DIGIT> <DIGIT> | "1" <DIGIT> <DIGIT> | "2" <DIGIT> <DIGIT>
<reg_name> ::= <reg_name_char> <reg_name> | <reg_name_char>
<reg_name_char> ::= <unreserved> | <pct_encoded> | <sub_delims>
<port> ::= <DIGIT> <port> | <DIGIT>
<path_abempty> ::= "/" <segment> <path_abempty> | "/" <segment> | <path_empty>
<path_absolute> ::= "/" <segment_nz> <path_abempty> | "/"
<path_rootless> ::= <segment_nz> <path_abempty> | <segment_nz>
<path_empty> ::= <ALPHA>
<segment> ::= <pchar> <segment> | <pchar>
<segment_nz> ::= <pchar> <segment> | <pchar>
<pchar> ::= <unreserved> | <pct_encoded> | <sub_delims> | ":" | "@"
<query> ::= <query_char> <query> | <query_char>
<query_char> ::= <pchar> | "/" | "?"
<fragment> ::= <fragment_char> <fragment> | <fragment_char>
<fragment_char> ::= <pchar> | "/" | "?"
<pct_encoded> ::= "%" <HEXDIG> <HEXDIG>
<unreserved> ::= <ALPHA> | <DIGIT> | "-" | "." | "_" | "~"
<sub_delims> ::= "!" | "$" | "&" | "'" | "(" | ")" | "*" | "+" | "," | ";" | "="
<ALPHA> ::= "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"
<DIGIT> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<HEXDIG> ::= <DIGIT> | "a" | "b" | "c" | "d" | "e" | "f" | "A" | "B" | "C" | "D" | "E" | "F"
变量{{var}}
<variable> ::= "{{" <variable_name> "}}"
<variable_name> ::= <letter> <variable_name_tail> | <letter>
<variable_name_tail> ::= <variable_name_char> <variable_name_tail> | <variable_name_char>
<variable_name_char> ::= <letter> | <digit> | "_"
<letter> ::= "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"
<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"