Ho riscritto pedissequamente l'espressione regolare in modo da poter usare preg_replace. In questo modo si puō passare una funzione come argomento. (E' la soluzione pių veloce che mi č venuta in mente a quest'ora ).
codice:
function url($url)
{
$length=15;
   if (strlen($url)>$length)  
    return "".substr($url,0,$length)."...";
 return "$url";
}

$regexp = '/[a-z]+:\/\/[^<>\s]+[a-z0-9\/]/ie';
echo $txt = preg_replace($regexp,"url('$0')",$testo);
Ovviamente nella funzione ci puoi mettere quello che ti pare. Qualcosa di pių complesso tipo mettere i puntini in mezzo.