Hai provato a trovarla da solo una soluzione?
Comunque innanzitutto ti conisglio questo sito http://regexlib.com/.
Poi visto che ero in vena mi sono fatto l'esercizietto che tu hai proposto, ed ecco il risultato:
codice:
<?php
// Prima soluzione
$stringa = "Visita il mio sito www.html.it oppure quello del mio amico http://www.google.it/";
echo $stringa."
";
$regex = "((http\://|https\://|ftp\://)|(www.))+(([a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(/[a-zA-Z0-9%:/-_\?\.'~]*)?";
$stringa2 = preg_replace('#'.$regex.'#', "<a href=\"$0\">$0</a>", $stringa);
echo $stringa2."
";
// soluzione 2
/**
* Passando un link a questa funzione controlla che inizi con il protocollo
* http, in caso contrario modifica la stringa e la ritorna con il protocollo http aggiunto.
*
* @param string URL
* @return string URL modificato
*/
function addhttp($webpage) {
$pos = strpos($webpage, 'http://');
if($pos === false && $webpage!= '') {
$webpage = "http://".$webpage;
}
return $webpage;
}
preg_match_all('#'.$regex.'#', $stringa, $risultato);
$cerca = $risultato[0];
$sostituisci = array();
foreach($cerca as $valore) {
$sostituisci[] = ''.addhttp($valore).'';
}
$stringa2 = str_replace($cerca, $sostituisci, $stringa);
echo $stringa2."
";
?>
Se provi il codice vedrai che la prima soluzione è più compatta ma fallisce nel caso in cui tu abbia un link senza l'http davanti. La seconda è un mix di espressioni regolari e str_replace.
Ciao
edit:
Tieni presente che nel codice che ho postato la prima stringa è testuale, ma evidentemente il forum usa una funzione simile a quella che ti ho postato per trasformarli gli url in link.