[PHP]REGEX et liens

Fermé
Utilisateur anonyme - 16 août 2009 à 22:16
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 - 17 août 2009 à 01:44
Bonjour,
j'ai un problème avec une regex me permettant de transformer les liens rentrés sous la forme "http://www.site.com/" vers un "<a href="http://www.site.com/">http://www.site.com/</a>" .
En fait, le problème de cette transformation est résolu, mais le problème est que la regex me transforme aussi les liens qui sont rentré sous la forme "<a href="http://www.site.com/">http://www.site.com/</a>", donc à la fin je me retrouve avec quelque chose comme ça :
http://www.site.com/">Nom du site


Pour l'instant, ma regex resssemble à ça :
#[http://][a-z0-9._/-]+#i

et avec preg_replace() :
$text = preg_replace('#[http://][a-z0-9._/-]+#i', '<a href="$0">$0</a>', $text);


Merci d'avance pour votre aide ;)
A voir également:

3 réponses

Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
16 août 2009 à 22:48
Salut !
Dans ta Regexp il s'agit de regarder si la chaîne concernée n'est pas précédée de (au moins) « href=" » pour la partie intérieure au tag, et de « > »pour la partie encadrée. Ça ressemble bigrement au principe des « assertions » (https://www.php.net/manual/fr/regexp.reference.assertions.php).

Si je ne m'abuse, ceci devrait marcher :
$text = preg_replace('#(?<!href=")(?<!>)http://[a-z0-9._/-]+#i', '<a href="$0">$0</a>', $text);


Tiens-moi au courant ;)

Edit : Je suppose que les [] autour de http sont dûs à la correction automatique de ce forum :S
0
Utilisateur anonyme
17 août 2009 à 01:27
Merci beaucoup Groarh !!
Ca fonctionne super comme ça :)

(merci pour le lien sur php.net, je ne savaient pas ce qu'était les assertions)

(Les crochets sont bien dûs à la correction automatique du forum)
0
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
17 août 2009 à 01:44
Attention, la regex que je t'ai donnée n'est pas parfaite. S'il y a des caractères entre l'adresse et la balise de gauche, ça ne marchera pas, par exemple avec ça :
<a href="http://example.com/"> http://example.com/</a> (il y a un espace)

Il y a moyen de filtrer ça mais ça va faire une regex beaucoup plus longue. Il s'agit de gérer (c'est rare, mais possible) des liens postés avec déjà leurs balises, qui commencent par http, et qui ont des caractères au mauvais endroit…
Si tu y tiens je te la fais ;)
0