I don't know why your result in match is only http://
but I cleaned your regex a bit
((?:(?:https?|ftp|gopher|telnet|file|notes|ms-help):(?://|\\)(?:www.)?|www.)[wd:#@%/;$()~_?+,-=\.&]+)
(?:)
are non capturing groups, that means there is only one capturing group left and this contains the complete matched string.
(?:(?:https?|ftp|gopher|telnet|file|notes|ms-help):(?://|\\)(?:www.)?|www.)
The link has now to start with something fom the first list followed by an optional www.
or with an www.
[wd:#@%/;$()~_?+,-=\.&]
I added a comma to the list (otherwise your long example does not match) escaped the -
(you were creating a character range) and unescaped the .
(not needed in a character class.
See this here on Regexr, a useful tool to test regexes.
But URL matching is not a simple task, please see this question here
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…