^(?:(?:[a-zA-Z](?:[a-zA-Z0-9+-.])*):(?:(?://(?:((?:(?:%[0-9A-Fa-f]{2})|[a-zA-Z0-
9\-._~\ua0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef]|[!$'()*+,;=]|:)*@)?(?:(?:\[(((([0-9
A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]):){6}((([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-
f][0-9A-Fa-f]):([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]))|(?:(?:\d|([1-9]\d
)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.
(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d
)|(25[0-5])))))|(::(([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]):){5}((([0-9A-
Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]):([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-
Fa-f]))|(?:(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\d
)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([
1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5])))))|((([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-
9A-Fa-f]))?::(([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]):){4}((([0-9A-Fa-f][
0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]):([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f])
)|(?:(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\d)|(2[0
-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d
)|(1\d\d)|(2[0-4]\d)|(25[0-5])))))|((([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-
f]):([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]))?::(([0-9A-Fa-f][0-9A-Fa-f][0
-9A-Fa-f][0-9A-Fa-f]):){3}((([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]):([0-9
A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]))|(?:(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)
|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d
\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5])))))|((((
[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]):){2}([0-9A-Fa-f][0-9A-Fa-f][0-9A-F
a-f][0-9A-Fa-f]))?::(([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]):){2}((([0-9A
-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]):([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A
-Fa-f]))|(?:(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\
d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|(
[1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5])))))|(((([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][
0-9A-Fa-f]):){3}([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]))?::([0-9A-Fa-f][0
-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]):((([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]
):([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]))|(?:(?:\d|([1-9]\d)|(1\d\d)|(2[
0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\
d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5])))
))|(((([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]):){4}([0-9A-Fa-f][0-9A-Fa-f]
[0-9A-Fa-f][0-9A-Fa-f]))?::((([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]):([0-
9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]))|(?:(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d
)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\
d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5])))))|(((
([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]):){5}([0-9A-Fa-f][0-9A-Fa-f][0-9A-
Fa-f][0-9A-Fa-f]))?::([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]))|(((([0-9A-F
a-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]):){5}([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-
9A-Fa-f]))?::))\])|(?:(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9
]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))\.(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5])
)\.(?:\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5])))|(?:([a-zA-Z0-9\-._~\ua0-\ud7ff
\uf900-\ufdcf\ufdf0-\uffef]|(?:%[0-9A-Fa-f]{2})|[!$'()*+,;=])*))(?:\d*)?)(?:(?:/
(?:((?:[a-zA-Z0-9\-_.~:@&=+$,\ua0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef]|(?:%[0-9A-Fa
-f]{2})))*))*))|(?:/((?:((?:((?:[a-zA-Z0-9\-_.~:@&=+$,\ua0-\ud7ff\uf900-\ufdcf\u
fdf0-\uffef]|(?:%[0-9A-Fa-f]{2})))+)(?:(?:/(?:((?:[a-zA-Z0-9\-_.~:@&=+$,\ua0-\ud
7ff\uf900-\ufdcf\ufdf0-\uffef]|(?:%[0-9A-Fa-f]{2})))*))*))?))?)|(?:((?:((?:[a-zA
-Z0-9\-_.~:@&=+$,\ua0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef]|(?:%[0-9A-Fa-f]{2})))+)(
?:(?:/(?:((?:[a-zA-Z0-9\-_.~:@&=+$,\ua0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef]|(?:%[0
-9A-Fa-f]{2})))*))*))?)|(?:))(?:\?(?:((?:[a-zA-Z0-9\-_.~:@&=+$,\ua0-\ud7ff\uf900
-\ufdcf\ufdf0-\uffef]|(?:%[0-9A-Fa-f]{2}))|[\ue000-\uf8ff/\?])*))?(?:#(?:((?:[a-
zA-Z0-9\-_.~:@&=+$,\ua0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef]|(?:%[0-9A-Fa-f]{2}))|[
/\?])*))?)$