RegexBuddy dá este aviso sobre o primeiro '?'
e se você removê-lo, parece funcionar, ou seja,
^(.+[^\/:])(?=[?\/]|$)
no entanto, se você estiver tentando analisar o baseurl, esse regex não funcionará. Use isso em vez disso:
select regexp_replace('....', '^(.*:)//([a-z\-.]+)(:[0-9]+)?(.*)$', '\2')