/
(?:
(?<alpha>[a-z])
(?<digit>[0-9])
(?<unreserved>\g<alpha>|\g<digit>|-|\.|_|~)
(?<hexdig>\g<digit>|[A-F])
(?<pct_encoded>%\g<hexdig>{2})
(?<gen_delims>[:\/\?\#\[\]@])
(?<sub_delims>[!\$&'\(\)\*\+,;=])
(?<reserved>\g<gen_delims>|\g<sub_delims>)
(?<ip_literal>\[(?:\g<ipv6address>|\g<ipvfuture>)\])
(?<ipvfuture>v\g<hexdig>+\.(?:\g<unreserved>|\g<sub_delims>|:)+)
(?<ipv6address>
(?:\g<h16>:){6}\g<ls32> |
::(?:\g<h16>:){5}\g<ls32> |
(?: \g<h16>)?::(?:\g<h16>:){4}\g<ls32> |
(?:(?:\g<h16>:){0,1}\g<h16>)?::(?:\g<h16>:){3}\g<ls32> |
(?:(?:\g<h16>:){0,2}\g<h16>)?::(?:\g<h16>:){2}\g<ls32> |
(?:(?:\g<h16>:){0,3}\g<h16>)?::(?:\g<h16>:){1}\g<ls32> |
(?:(?:\g<h16>:){0,4}\g<h16>)?:: \g<ls32> |
(?:(?:\g<h16>:){0,5}\g<h16>)?:: \g<h16> |
(?:(?:\g<h16>:){0,6}\g<h16>)?::
)
(?<h16>\g<hexdig>{1,4})
(?<ls32>\g<h16>:\g<h16>|\g<ipv4address>)
(?<ipv4address>\g<dec_octet>\.\g<dec_octet>\.\g<dec_octet>\.\g<dec_octet>)
(?<dec_octet>
25[0-5] | # 250-255
2[0-4]\g<digit> | # 200-249
1\g<digit>{2} | # 100-199
[1-9]\g<digit> | # 10-99