my $domain = qr{[^:/?#\s<>]+}; my $path = qr{/[^?#\s]*}; ... return qr{ $scheme : (?://)? $domain (?:$path)? (?:$query)? (?:$fragment)? }x;