Well, URL validation is more complicated than e-mail validation, because there are optional things that could go into a URL, like authentication stuff, port number, etc, so it's harder to validate with just one regular expression (trust me, I just tried and it ended up huge).
What I'd suggest is to use parse_url() to get each part of the URL, and then verify each fragment individually.
Diego