^(?:(?:[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}))|[ /\?])*))?)$