Когда ваш IP-адрес не совпадает, он пытается соответствовать условию |
. И это успешно, потому что 10.10.10.10.comasdf
соответствует ([-\w]+\.)+([a-z]+)
Попробуйте поставить ?>
перед (?#IP Address)
. Таким образом, когда IP-адрес совпадает, он не будет пытаться выполнить |(?#Subdomains)(([-\w]+\.)+(?#TopLevel Domains))([a-z]+)
после сбоя (?#Port)(:[\d]{1,5})?(\/\S*)*$
^(?#Protocol)((ht)tp(s?)\:\/\/|~\/|\/){1}(?>(?#IP Address)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})|(?#Subdomains)(([-\w]+\.)+(?#TopLevel Domains))([a-z]+))(?#Port)(:[\d]{1,5})?(\/\S*)*$
См .: http://regexr.com? 2u8ks