御陰様でなんとか出来たような感じです。

(?:([a-z]+)://)?       # Service
(?:([^:/@]*)?:?([^@:/]*)?@)? # ID:PASS
([\d\w._\-]*)         # Host
(?::(\d*))?          # Port
(?:([\d\w~._/%\-]*))?     # Path
(?:\??([\w\d%=+&]*))?     # Query

よく考えると皆さんが正規表現に凝ってらっしゃるのは
エラー (汚染) チェックも兼ね備えているからなんですかね。
私も早く安心して任せられるようになりたいです。