encontre todos os URLs (links) em texto com php

Eu tenho esse código regex, que deve transformar todos os tipos de URLs diferentes em links em algum text

O código preg_replace é:

$regex = '@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@';
$text = preg_replace($regex, '<a href="$1">$1</a>', $item);

gora, ele funciona para quase todos os URLs que você pode imaginar, mas os problemas que tenho são vírgulas e caracteres especiais nos URLs .

O problema está me fazendo:

http: //www.sdfsdfsdf.sd/si/391,1000,1/more.htm

http: //sdfsddsdf-sdfsdfds.sr/component/option,com_contact/Itemid,3/lang,si

Engraçado aqui no stackoverflow esses dois estão OK

Obrigado e cumprimentos

questionAnswers(3)

yourAnswerToTheQuestion