Estuve 2 días tratando de conseguir una expresion regular para que detecte URLs en una variable y luego mostrar ese texto mas el link.. y bueno.. armé esta que función en PHP que funciona de 10…
Código :
<?php
function toLink($text){
$text = html_entity_decode($text);
$text = " ".$text;
$text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_+.~#?&//=]+)',
'<a href="\1">\1</a>', $text);
$text = eregi_replace('(((f|ht){1}tps://)[-a-zA-Z0-9@:%_+.~#?&//=]+)',
'<a href="\1">\1</a>', $text);
$text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)',
'\1<a href="http://\2">\2</a>', $text);
$text = eregi_replace('([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})',
'<a href="mailto:\1">\1</a>', $text);
return $text;
}
$texto_ejemplo="visiten www.xtremweb.com.ar";
// este es un texto de prueba$texto_final=toLink($texto_ejemplo);
//aca llamamos la funcion y hacemos el link para poder
// mostrarlo echo $texto_final;
?>

para http o https basta con hacer condicional la s.. no es necesario repetir la misma expresión ( https? )
te recomiendo revises el programa regex buddy, el cual te ayudara mucho con el tema de las expresiones regulares
saludos.
$result = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[A-Z0-9+&@#\/%=~_|]/i', '<a href="\0">\0</a>', $subject);
(((f|ht){1}tps?://)[-a-zA-Z0-9@:%_+.~#?&//=]+)