[regex] 2 preg_replace en 1 ?

2 preg_replace en 1 ? [regex] - PHP - Programmation

Marsh Posté le 31-03-2006 à 11:24:05    

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
Reply

Marsh Posté le 31-03-2006 à 11:24:05   

Reply

Marsh Posté le 31-03-2006 à 11:41:49    

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
Reply

Marsh Posté le 31-03-2006 à 12:43:25    

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

Reply

Marsh Posté le 31-03-2006 à 13:22:17    

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);

Reply

Marsh Posté le 31-03-2006 à 14:34:58    

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 ^^

Reply

Marsh Posté le 31-03-2006 à 14:48:20    

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
Reply

Marsh Posté le 31-03-2006 à 15:01:55    

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

Reply

Sujets relatifs:

Leave a Replay

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