一个完整的URL,可能会包含以下部分:

http://www.website.com:8080/lab/sub/page.php?do=list&type=2#tool

我试着写了一个能识别并捕获URL中这些部分的正则表达式。

/^((?:http[s]?|ftp):\/\/)?([^:\/\s]+|\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})(:\d+)?(?:((?:\/\w+)*\/)([\w-.]+[^#?\s]+)?(\?[^\s#]*)?(#\w+)?)?$/i

这样用不同的颜色标记,就很容易看清了。

可以在这里试一试。这个正则表达式能干净利落地捕获URL的各个部分。

另外,在PHP里可以用parse_url()来分析URL。如果URL明显不合法,该函数返回FALSE。