Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1546 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1348454
Dharius
Posté le 18-04-2006 à 00:30:00  profilanswer
 

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

mood
Publicité
Posté le 18-04-2006 à 00:30:00  profilanswer
 

n°1348471
nargy
Posté le 18-04-2006 à 01:45:28  profilanswer
 

(.*) 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
n°1348520
Dharius
Posté le 18-04-2006 à 09:12:51  profilanswer
 

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

n°1348528
Dharius
Posté le 18-04-2006 à 09:32:19  profilanswer
 

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

n°1348531
Dharius
Posté le 18-04-2006 à 09:33:08  profilanswer
 

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

n°1348574
nargy
Posté le 18-04-2006 à 10:20:21  profilanswer
 

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.

n°1348582
Dharius
Posté le 18-04-2006 à 10:27:51  profilanswer
 

Ok, merci ;)

n°1348603
chaced
Posté le 18-04-2006 à 10:54:04  profilanswer
 

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
n°1348616
nargy
Posté le 18-04-2006 à 11:09:54  profilanswer
 

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.

n°1348621
Dharius
Posté le 18-04-2006 à 11:13:54  profilanswer
 

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

mood
Publicité
Posté le 18-04-2006 à 11:13:54  profilanswer
 

n°1348628
nargy
Posté le 18-04-2006 à 11:19:37  profilanswer
 

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.

n°1348638
Dharius
Posté le 18-04-2006 à 11:29:16  profilanswer
 

Ok, thx !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
SOS compilateur CAide Javascript Expression reg
[SGBD] dBase, strings, replace et doubles[Delphi] Expression régulière - nom de fichier
récupérer des chiffres dans une expression (vbaexcel)NHIBERNATE "outer or full join must be followed by path expression"
[C] Expression régulieres et Windowsune chaine de caractère dans une expression régulière
Plus de sujets relatifs à : SOS : expression régulière avec EREGI_REPLACE()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR