[PHP] regex

regex [PHP] - PHP - Programmation

Marsh Posté le 24-04-2002 à 21:11:54    

J'ai un petit probleme avec les regex  :crazy:  
 
J'ai une variable : $text="Cliquer <a href=\"mailto:a@a.fr\">ici</a>, ou envoyer la : a@a.fr";
 En vert le lien est deja fais donc on n'y touche pas mais je veut creer un lien sur le rouge !!
 
Donc je fais mon petit regex qui remplace a@a.fr par <a href="mailto:a@a.fr>a@a.fr</a> !!
 
Mais le probleme c'est que ma regex remplace TOUS les a@a.fr meme celui qui est dans le vert !!!  
 
Donc je me retrouve avec sa :
 
$text="Cliquer <a href=\"mailto:<a href="mailto:a@a.fr>a@a.fr</a>\">ici</a>, ou envoyer la : <a href="mailto:a@a.fr>a@a.fr</a>";
 
Sa va pas du tous !!

 

[jfdsdjhfuetppo]--Message édité par bozocarzu le 24-04-2002 à 21:12:36--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 24-04-2002 à 21:11:54   

Reply

Marsh Posté le 24-04-2002 à 21:43:04    

tu pourrais au moins filer ta regex  :jap:  
 
je pencherais pour tester que a@a.a se trouve bien à la fin de la chaine en utilisant le $
 
[a-z0-9](@)[a-z0-9](.)[a-z0-9]$


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 24-04-2002 à 22:29:37    

Voila ma regex
 
$avant="#([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)#si";
$apres='<a href="mailto:\0">\0</a>';
$text=preg_replace($avant,$apres,$text);

Reply

Marsh Posté le 24-04-2002 à 22:31:44    

Ta methode ne marche qui si a@a.a est situé a la fin de la variable text !
Donc dans se cas sa marche mais il peut y avoir du text deriere a@a.fr donc la sa ne marhce plus !

 

[jfdsdjhfuetppo]--Message édité par bozocarzu le 24-04-2002 à 22:37:57--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 24-04-2002 à 22:50:16    

y a un truc que je pige pas : comment ça ce fait que le premier llien est déjà modifié ?
 
tu devrais les modifier tous avec ta regexp en une seule fois...


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 24-04-2002 à 22:52:19    

Oui le premier lien est deja comme sa d'origine, je veut juste convertir les lien qui ne sont pas converti !!!

Reply

Marsh Posté le 24-04-2002 à 22:54:41    

en creusant un peu on peut trouver des critères de tri :
 
il faut que a@a.fr ne soit pas précédé de mailto: (lien déjà transformé)
 
il ne doit pas se trouver entre  > et </ (déjà des tags HTML)
 
ça irait pas avec ça ?


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 24-04-2002 à 23:03:21    

Bon j'avoue, j'ai essayer de le faire avec des restriction mais je ne suis pas arrivé a chaque fois il ne me trouve plsu ma chaine de charactere a@a.a :(
 
Tu peut essayer de me le faire, tu peut prendre en base de regex : [a-z0-9]@[a-z0-9] sa simplifiras le code

 

[jfdsdjhfuetppo]--Message édité par bozocarzu le 24-04-2002 à 23:04:16--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 24-04-2002 à 23:18:25    

([^mailto:|>])(([a-z0-9_]|\\-|\\.)+@([^[:space
:]]*)([[:alnum:]-])\.([^[:space:]]*)([[:alnum:]-]
))([^</])
 
 
à tester... j'ai peut être merdé la syntaxe au début
 
une chaine ne commençant pas par mailto: ou > contenant a@a.a (ou autre) et ne finissant pas par </

 

[jfdsdjhfuetppo]--Message édité par Sh@rdar le 24-04-2002 à 23:21:01--[/jfdsdjhfuetppo]


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 25-04-2002 à 01:04:50    

J'ai trouver, enfin j'ai recopier sur un script !!
 
$avant="#([\n ])([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)?[\w]+)#i";
$apres='\\1<a href="mailto:\\2@\\3">\\2@\\3</a>';
$text=preg_replace($avant,$apres,$text);

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed