encontrar todas las URL (enlaces) en texto con php

Tengo este código regex, que debería transformar todo tipo de URL diferentes en enlaces en algún texto.

El código preg_replace es:

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

ahora funciona para casi todas las URL que puedas imaginar, pero los problemas que tengo son comas y caracteres especiales en las URL ...

El problema me está haciendo:

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

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

Divertido aquí en stackoverflow esos dos están bien :))

Gracias y Saludos cordiales

Respuestas a la pregunta(3)

Su respuesta a la pregunta