Написал регулярку для разбора URL, не знаю, кто-то уже такое делал, но я не нашёл.
Задача - извлекать из URL всё что можно: схему, имя, пароль, хост, порт и т.д.
\A
(?: (?P<scheme> \w+) :// )?
(?: (?P<user> [\w_]+) [:@] )?
(?: (?P<password> (?<=:) [\w%_]+) @ )?
(?: (?P<host> [\w._-]+?) (?:[/:?#]|\Z) )?
(?: (?P<port> (?<=:) \d+) (?:[/:?#]|\Z) )?
(?: (?P<path> (?<=/) [^?#]*) (?:[?#]|\Z) )?
(?: (?P<parameters> (?<=\?) [^#]+) (?:[#]|\Z) )?
(?: (?P<anchor> (?<=\#) .+) \Z )?