Хммм, попробуй
(((((ht|f)tp(s?))\://)|(www\.))((|[a-zA-Z])([a-zA-Z0-9-]+.)([a-zA-Z]{2,8}))(\:[0-9]+)*(/($|[a-zA-Z0-9.\,\;\?\'\+&%\$#\=~_-]+))*)
EDIT:
Да, я действительно не проверял это. Хорошо, я тоже не проверял, но я ДЕЙСТВИТЕЛЬНО внимательно посмотрел на него;)
(((((ht|f)tp(s?))\://)|(www\.))(([a-zA-Z0-9-]+.)?([a-zA-Z0-9]+\.)([a-zA-Z]{2,8}))(\:[0-9]+)*(/($|[a-zA-Z0-9.\,\;\?\'\+&%\$#\=~_-]+))*)
Вы должны посмотреть на хорошего тестера регулярных выражений. Я обычно использую Expresso, но есть много других.