Une version simplifiée:
$txt = "lien http://www.site.com/page.php suite www.site.com/page.php suite
https://www.site.com/page.php suite
ftp://www.site.com/page.php suite file://www.site.com/page.php";
$trouve = '#(?:\b(?:https?|file|ftp)://[^ ]*|www\.[^ ]*)#';
$remplace = '<a href="$0">$0</a>';
$txt = preg_replace($trouve, $remplace, $txt);
Attention, c'est du tout juste pondu. Pas testé toutes les combinaisons possibles.PS: pourrais-tu éditer ton message plus haut avec le loooooong motif, il camboule la mise en page de ce post?
Edit: petite correction cosmétique du motif.