Искал в сети RegExp для разбора URL на состовляющие. Какие-то ребята примерно за пару лет создали это:
^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w\d{1-3}]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|edu|co\.uk|ac\.uk|it|fr|tv|museum|asia|local|travel|[a-z]{2})?)(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,:=]|%[a-f\d]{2}))(?:&(?:[-\w~!$+|.,:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,:=]|%[a-f\d]{2})))(?#Anchor)(?:#(?:[-\w~!$+|.,:=]|%[a-f\d]{2}))?$
Имхо, это какой-то гипертрофированный монстр. Сел и написал полегче и менее мутный. Вот этого хватит на 99% случаев:
^([A-Za-z0-9_+.]{1,8})(:[\/].)?([!-~]+@)?([^\/?#:])(:[0-9])?(\/[^?#])?(\?[^#])?(\#.*)?
#435175
from Talk.v105A98220E4, 25 months ago