jak převést textové odkazy na aktivní?

Potřebuji v textu příspěvku převést všechna odkazy a emaily na aktivní adresy. Vytvořil jsem si funkci (za pomocí tohoto fóra) a nefunguje:

function odkazy($text) {
global $export;

$export = preg_replace("/(http:\/\/[_|-|A-Za-z0-9|]+[.]+[A-Za-z]{2,4}[-_~%#&=?.a-z0-9\/]*)/i", "<a href=\"\\1\">\\1</a>", $text);
$export = preg_replace("/(\s)(www.[_|-|A-Za-z0-9|]+[.]+[A-Za-z]{2,4}[-_~%#&=?.a-z0-9\/]*)/i", "\\1<a href=\"http://\\2\">\\2</a>",$text);
$export = preg_replace("/mailto:([_a-zA-Z0-9\.\-]+@[_a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4})/i","<a href=\"mailto:\\1\">\\1</a>",$text);

return $export;
}

počítám, že dál zadám jen
$text = odkazy($text);

kde je, prosím, chyba? Díky za odpověď...
ještě bych měl uvést, že tomu preg_replace moc nerozumím - zkopíroval jsem to...
to vypada spis jako str_replace....
$text = ....
$text = ....
$text = ....
return $text
tak už to mám (našel jsem to na php.cz :-))

function odkazy($Text)
{
// First match things beginning with http:// (or other protocols)
$NotAnchor = '(?<!"|href=|href\s=\s|href=\s|href\s=)';
$Protocol = '(http|ftp|https):\/\/';
$Domain = '[\w]+(.[\w]+)';
$Subdir = '([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?';
$Expr = '/' . $NotAnchor . $Protocol . $Domain . $Subdir . '/i';

$Result = preg_replace( $Expr, "<a href=\"$0\" title=\"$0\" target=\"_blank\">$0</a>", $Text );

// Now match things beginning with www.
$NotAnchor = '(?<!"|href=|href\s=\s|href=\s|href\s=)';
$NotHTTP = '(?<!:\/\/)';
$Domain = 'www(.[\w]+)';
$Subdir = '([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?';
$Expr = '/' . $NotAnchor . $NotHTTP . $Domain . $Subdir . '/i';

return preg_replace( $Expr, "<a href=\"http://$0\" title=\"http://$0\" target=\"_blank\">$0</a>", $Result );

}