Voilà j'ai encore un petit problème avec les expressions régulières. J'ai un script pour faire automatiquement des liens cliquables. Jusque là pas de problème, mais je donne aussi la possibilité de faire des lien bbocde comme [ url =x]lien[/url].

L'url est donc parsée deux fois à cause du http://.

Pour le moment j'ai le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
// Parse [ url ]
$text = preg_replace('#\[url=([^\]]*)\](.*)\[/url\]#Usi', '<a href="$1" title="$2">$2</a>', $text);
 
// Liens cliquables
$in = array('`((?:https?|ftp)://\S+[[:alnum:]]/?)`si', '`((?<!//)(www\.\S+[[:alnum:]]/?))`si');
$out = array('<a href="$1">$1</a>', '<a href="http://$1">$1</a>'); 
$text = preg_replace($in, $out, $text);
J'ai essayé de modifier la 2ème expression comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$in = array('`([^\]=](?:https?|ftp)://\S+[[:alnum:]]/?)`si', '`((?<!//)(www\.\S+[[:alnum:]]/?))`si');
qui est censée rechercher s'il n'y a pas de "=" ou de "]" avant (balises bbcode) mais ça ne change rien et ça affiche n'importe quoi si j'ai des balises [url] (double lien), il y a sûrement une erreur de synthaxe comme je connais pas beaucoup mais je n'ai pas trouvé mieux.