Réponse acceptée !
A mon avis tu dois forcément avoir un caractère séparateur entre les différents éléments, sinon c'est pas possible de déterminer une URL... Par exemple, si il y a pas de séparateur :
http://www.domaine.tld/tototatatutuhttp://www.phpcs.comEst-ce que l'URL est
[ Lien ] ou
[ Lien ] ?
Sinon pour la première erreur, il manque simplement une parenthèse fermante à la fin :
if(preg_match("(^(https?|ftp):\/\/.*$)", $addr)) {
Le preg_match fonctionne parfaitement, comparé avec le script d'un pote qui fonctionne niquel, et c'est le même :)