Я не знаю, почему ваш результат в совпадении только http://
, но я немного очистил ваше регулярное выражение
((?:(?:https?|ftp|gopher|telnet|file|notes|ms-help):(?://|\\\\)(?:www\.)?|www\.)[\w\d:#@%/;$()~_?\+,\-=\\.&]+)
(?:)
- это группы без захвата, это означает, что существует только одна группа захватаслева и содержит полную совпавшую строку.
(?:(?:https?|ftp|gopher|telnet|file|notes|ms-help):(?://|\\\\)(?:www\.)?|www\.)
Теперь ссылка должна начинаться с чего-то из первого списка, за которым следует необязательный www.
или www.
[\w\d:#@%/;$()~_?\+,\-=\\.&]
Я добавил запятую в список (в противном случае ваш длинный пример не соответствует) экранировал -
(вы создавали диапазон символов) и удалил экранирование .
(не требуется в классе символов.
См. Здесь здесь, в Regexr , полезном инструменте для проверки регулярных выражений.
Но сопоставление URL-адресов не простая задача, см. Этот вопрос здесь