SOS : expression régulière avec EREGI_REPLACE()

SOS : expression régulière avec EREGI_REPLACE() - PHP - Programmation

Marsh Posté le 18-04-2006 à 00:30:00    

Bonjour,
 
 
Ca fait des heures que j'essaie de remplacer dans nu texte à la volée plusieurs liens du style    
 
"mods/dossiers/XXX_325.html"  
en  
"mobile/dossier.php?id=325" mais je n'arrive ppas à trouver l'expression régulière correcte.  
 
J'ai essayé :
$texte = ereg_replace ("mods/dossiers/(.*)_(.*).html", "mobile/dossier.php?id=\\2", $texte);
 
mais ca marche pas : tous le texte et autres liens situés entre le 1er (dont le 1er) et le dernier lien disparaissennt et je n'obtien que le dernier lien qui s'affiche...
 
Si un pro peut m'aider ca serait cool !!
 
Merci !
 
David

Reply

Marsh Posté le 18-04-2006 à 00:30:00   

Reply

Marsh Posté le 18-04-2006 à 01:45:28    

(.*) bouffe tout ce qu'il peut, aussi quand tu en mets plusieurs tu peut avoir des problèmes.
Essaye:
$texte = ereg_replace ("mods/dossiers/([^_]+)_([0-9]+).html", "mobile/dossier.php?id=\\2", $texte);
 

  • ([^_]+) : suppose que le 1er argument contient au moiins  1 caractère, et ne contient pas le caractère ``_``
  • ([0-9]+) : suppose que le 2ème argument est composé d'un ou plusieurs chiffres


Si je fais de mauvaises suppositions sur le 1er argument, essaye preg_replace avec:
(.+?)
qui au lieu de manger tous les caractères possibles, ne prends que le minimum nécessaire.
Exemple:
$texte = preg_replace ("@mods/dossiers/(.+?)_([0-9]+).html@", "mobile/dossier.php?id=\\2", $texte);

Message cité 1 fois
Message édité par nargy le 18-04-2006 à 01:46:01
Reply

Marsh Posté le 18-04-2006 à 09:12:51    

COOL !!! la première fonctionne !!!
 
Merci beaucoup nargy, je suis trop content ! :)
 
David

Reply

Marsh Posté le 18-04-2006 à 09:32:19    

DHARIUS : J'ai un autre PB...
 
HA...............
 
J'ai un autre PB : parfois il n'y a pas le morceau de chaine "mods/dossiers/", alors, j'ai essayé avec :
 
$texte = ereg_replace ("([^_]+)_([0-9]+).html", "dossier.php?id=\\2", $texte);  
 
Mais là ca marche plus du tout ! ? :(
 
David

Reply

Marsh Posté le 18-04-2006 à 09:33:08    

nargy a écrit :

(.*) bouffe tout ce qu'il peut, aussi quand tu en mets plusieurs tu peut avoir des problèmes.
Essaye:
$texte = ereg_replace ("mods/dossiers/([^_]+)_([0-9]+).html", "mobile/dossier.php?id=\\2", $texte);
 

  • ([^_]+) : suppose que le 1er argument contient au moiins  1 caractère, et ne contient pas le caractère ``_``
  • ([0-9]+) : suppose que le 2ème argument est composé d'un ou plusieurs chiffres


Si je fais de mauvaises suppositions sur le 1er argument, essaye preg_replace avec:
(.+?)
qui au lieu de manger tous les caractères possibles, ne prends que le minimum nécessaire.
Exemple:
$texte = preg_replace ("@mods/dossiers/(.+?)_([0-9]+).html@", "mobile/dossier.php?id=\\2", $texte);


 
MERCI !!!
 
HA...............
 
J'ai un autre PB : parfois il n'y a pas le morceau de chaine "mods/dossiers/", alors, j'ai essayé avec :
 
$texte = ereg_replace ("([^_]+)_([0-9]+).html", "dossier.php?id=\\2", $texte);  
 
Mais là ca marche plus du tout ! ? :(
 
David

Reply

Marsh Posté le 18-04-2006 à 10:20:21    

Dharius, stp, je veux bien te corriger une regexp, surtout que l'erreur était classique, mais tu devrais quand même faire un petit effort en ouvrant une doc, et en faisant quelques essais avant de poster.

Reply

Marsh Posté le 18-04-2006 à 10:27:51    

Ok, merci ;)

Reply

Marsh Posté le 18-04-2006 à 10:54:04    

Juste une info au passage, ereg_* est obsolete, il faut utiliser preg maintenant, qui est environ 10 fois plus performant.


---------------
CPU-Z | Timespy | Mes bd
Reply

Marsh Posté le 18-04-2006 à 11:09:54    

C'est comme ça que je me rends bien compte qu'il n'a même pas pris le temps de lire la doc:
http://fr.php.net/manual/fr/function.ereg-replace.php
Pour les expressions régulières, il y a pletore de tutos sur le web.

Reply

Marsh Posté le 18-04-2006 à 11:13:54    

re,
 
Si, c'est le premier site que je suis passé voir, simplement il y a ceux qui comprennent et les autres... :)

Reply

Marsh Posté le 18-04-2006 à 11:13:54   

Reply

Marsh Posté le 18-04-2006 à 11:19:37    

ha ok, une copie de la doc officielle sur le expression régulières Perl:
http://www.hmug.org/man/1/perlretut.php
Si ça peut t'aider.

Reply

Marsh Posté le 18-04-2006 à 11:29:16    

Ok, thx !

Reply

Sujets relatifs:

Leave a Replay

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