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

  FORUM HardWare.fr
  Programmation
  PHP

  [regex] 2 preg_replace en 1 ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[regex] 2 preg_replace en 1 ?

n°1336181
bixibu
Ca ... c'est fait!
Posté le 31-03-2006 à 11:24:05  profilanswer
 

Salut ;)
 
J'aurais voulu savoir si les regex permette de faire en 1 seul preg_replace ce que je fais en 2 preg_replace.
A savoir:
 
j'ai une variable de texte qui contient une phrase. Or je veut mettre cette phrase au pluriel (le mot dossiers et l'ajectif si il y'en a un)
cette phrase peut etre  de 2 forme différentes :
 
forme 1:  
Dossier en attente d’informations //le mot dossier suivi de plusieurs mots. Seul le mot "dossier" est à mettre au pluriel
 
forme 2:
Dossier refusé //le mot dossier suivi d'un adjectif : les 2 mots sont a mettre au pluriel.
Dossier engagé
Dossier ajourné
 
Je m'en suis sorti en utilisant 2 fonctions:
$lib_etat = preg_replace('!(Dossier)(.+)!', '$1s$2', $lib_etat);
$lib_etat = preg_replace('!(Dossiers\s)(refusé|engagé|ajourné)!', '$1$2s', $lib_etat);
 
Est il possible de reunir ces 2 fonction en 1 seul?
 
merci


Message édité par bixibu le 31-03-2006 à 11:24:30
mood
Publicité
Posté le 31-03-2006 à 11:24:05  profilanswer
 

n°1336197
anapajari
s/travail/glanding on hfr/gs;
Posté le 31-03-2006 à 11:41:49  profilanswer
 

Code :
  1. $lib_etat = preg_replace('!(Dossier)(.+)(s|é)$!', '$1s$2s', $lib_etat);


 
edit: après reflexion ça merdoie, vu que ça vire le é :) ... je réfléchis je reviens
 
edit2: donc avec un exec au milieu ... ça devient vraiment dégeux mais bon :D

Code :
  1. preg_replace('!(Dossier)(.+)(s|é)$!e', "'$1s$2'.('$3'=='é'?'és':'s')", $lib_etat)


Message édité par anapajari le 31-03-2006 à 12:03:10
n°1336257
bixibu
Ca ... c'est fait!
Posté le 31-03-2006 à 12:43:25  profilanswer
 

Salut :p
 
Oula ca merdoie grave en effet, il doit y avoir des problemes de guillemets j'ai des parse error :p, je vais voir ce qui va po :p
 
Merci du coup de main

n°1336288
anapajari
s/travail/glanding on hfr/gs;
Posté le 31-03-2006 à 13:22:17  profilanswer
 

nan ça marche c'est le forum qui remplace la premiere " par $#34; le code aurait du etre

preg_replace('!(Dossier)(.+)(s|é)$!e', "'$1s$2'.('$3'=='é'?'és':'s')", $lib_etat);

n°1336338
bixibu
Ca ... c'est fait!
Posté le 31-03-2006 à 14:34:58  profilanswer
 

Ah ok ;)
 
Bon, je vais essayer de comprendre comment tu as fait ^^
Si le metier de traducteur regex / francais existait je pense que ce serait un des jobs ou yaurait le plus de suicide ^^
 
edit: ha petite probleme, de ma faute puisque je ne t'ai pas donné toutees les solutions pour la forme 1.
 
Dossiers en attente des pièces initiales
Dossier en attente de l’avis du médecin de prévention
Dossiers en attente de pièces complémentaires
Dossier en attente d’engagement
Dossiers en attente d’informations
Dossiers refusés
Dossiers engagés
Dossiers clos
Dossiers ajournés
 
Il manque des s ^^

n°1336362
anapajari
s/travail/glanding on hfr/gs;
Posté le 31-03-2006 à 14:48:20  profilanswer
 

preg_replace('!(Dossier)(.+)(s|é)$!e', "'$1s$2'.('$3'=='s'?'s':'$3s')", $s);


 
edit: ah ba non j'ai lu trop vite j'ai juste regardé la fin
donc tu pourrais faire:

preg_replace('!(Dossier)(.+?)(.)$!e', "'$1s$2'.('$3'=='s'?'s':'$3s')", $s);


Mais ça marcherait pas non plus vu que ça rajouterais trop de s
 
tu pourrais aussi rusé en faisant:

print preg_replace('!(Dossier)(.+)(.)$!e', "'$1s$2'.('$3'=='é'?'$3s':'$3')", $s)


là ça doit marcher ...
 
Mais encore une fois je trouve que c'est vraiment bien compliqué pour par grand chose...
Un str_replace sur dossiers, un autre sur le é final et c'est bien plus simple/clair/maintenable/optimisé


Message édité par anapajari le 31-03-2006 à 14:58:09
n°1336379
bixibu
Ca ... c'est fait!
Posté le 31-03-2006 à 15:01:55  profilanswer
 

Ok lol merci beaucoup pour t'avoir creusé la tete ;)
 
Ma solution du premier post est donc la moins compliquée mais OK ?
 
Allez ca roule, je garde mon ptit truc
 
ps: j'adore ton expression "merdoie" je crois que je vais la ressortir souvent :d


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

  [regex] 2 preg_replace en 1 ?

 

Sujets relatifs
remplacer fonctions chaine par un regex ?REGEX tout con.. mais probleme
Une nouvelle petite question sur les PREG[résolu]probleme entre fonction et regex
REPLACE d'un caractère en VB ???Probleme Regex :(
REGEX - extraire une chaineModification vbs fonction replace de XXX à YYY
replace(...) sous condition.regex et preg_replace()
Plus de sujets relatifs à : [regex] 2 preg_replace en 1 ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)