; regex from http://search.cpan.org/~gaas/URI-1.51/URI.pm#PARSING_URIs_WITH_REGEXP
(def parse-url (url)
(withs ((scheme hostport path query frag)
(re-match
"(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?"
url)
(host port) (tokens hostport #\:))
(obj scheme (sym scheme)
hostport hostport
host host
port (errsafe:int port)
path path
query query
frag frag)))
arc> (parse-url "http://example.com:8080/") #hash((path . "/") (port . 8080) (host . "example.com") (hostport . "example.com:8080") (scheme . http))
Note that a default port is not provided.
arc> (parse-url "http://example.com/foo/bar?a=1&b=2#here") #hash((frag . "here") (query . "a=1&b=2") (path . "/foo/bar") (host . "example.com") (hostport . "example.com") (scheme . http))
This hack depends on arc3.1 and re3.
Same as Arc.