Aide sur une expression régulière pour preg_replace() - PHP - Programmation
Marsh Posté le 28-08-2008 à 16:51:05
"à partir de [0-9]{3}€" 
enfin, ça c'est dans le cas ou tu as un montant à 3 chiffres, sans séparateur. 
ça marche ??
Marsh Posté le 28-08-2008 à 16:55:45
Pas mieux.  
 
D'ailleurs je me demandais si on pouvait utiliser les espaces librement ou s'il fallait utiliser [:space:]... 
En tous cas là visiblement ça ne fonctionne pas  
 
 
EDIT : j'ai essayé avec moins de chiffre, plus de chiffre etc... sans succès
Marsh Posté le 28-08-2008 à 17:02:03
tu peux montrer la texte que tu essayes de "lire". Par hasard ça ne serait pas de l'html où les caractères auraient été remplacés par leur code???
Autrement es-tu sur de bosser sur le même encoding entre la texte lu et ton script?
Sinon la regex donnée plus haut est bonne mais un peu juste j'écrirais plutot:
| /partir de \d+(|\.\d{1,2})€/ | 
Qui doit te permettre de matcher tous les nombres avec 1 ou 2 chiffres après la virgule.
Marsh Posté le 28-08-2008 à 17:06:19
En effet ce que j'essaie de "lire" est contenu dans un flux RSS, qui contient des caractères spéciaux qui sont encodés dans le flux. En l'occurence voici un exemple : 
 
Super pc qui tue : à partir de 2 399,00 € 
 
à correspondant à "à" 
€ à "€"
Marsh Posté le 28-08-2008 à 17:08:56
oui donc tu te rends bien compte que "à" != "à" naaan??? 
Bref la regex devient: 
| /à partir de \d+(|\.\d{1,2}) €/ | 
Marsh Posté le 28-08-2008 à 17:10:14
Oui je m'en rends bien compte  D'ailleurs j'ai fait le test aussi en mettant les à etc... Ca ne fonctionne pas.
 D'ailleurs j'ai fait le test aussi en mettant les à etc... Ca ne fonctionne pas.
Marsh Posté le 28-08-2008 à 17:12:38
Dans le contexte, la regex est comme ça :  
 
preg_replace("/à partir de \d+(|\.\d{1,2}) €/",'<strong>//0</strong>',$description) 
 
==> Le caractère séparateur dans le prix est une virgule, et non un point. Ca change quelque chose dans la regex? Je l'ai modifié pour voir, mais ça n'a rien changé. "/à partir de \d+(|\,\d{1,2}) €/"
Marsh Posté le 28-08-2008 à 17:19:47
faut pas backslasher la virgule (par contre le point c'était nécessaire car c'est un caractère special dans les regexs)
mais ça doit rien changer.
Fait déjà un preg_match juste pour vérifier/tester ce qu'il arrive à matcher.
Marsh Posté le 28-08-2008 à 17:22:32
preg_match() fait, en enlevant le backslash pour la virgule. Le résultat est 0 à chaque ligne.
Marsh Posté le 29-08-2008 à 13:42:34
Je suis arrivé à bricoler un petit truc qui marche, mais pas quand le nombre avant la virgule contient un espace (exemple : 2 550). Que dois-je remplacer? 
 
Et aussi, dans le second argument de mon preg_replace, j'ai mis //0 pour qu'il mette la chaine trouvée dans le première argument, ca ne marche pas, il faut mettre quoi? 
 
merci 
Marsh Posté le 29-08-2008 à 14:12:37
| Mush22 a écrit : Je suis arrivé à bricoler un petit truc qui marche, mais pas quand le nombre avant la virgule contient un espace (exemple : 2 550). Que dois-je remplacer? | 
| /à partir de [\s\d]+(|\.\d{1,2}) €/ | 
Mais attention car cela va tolérer beaucoup plus de chose que tu ne l'espere , genre "1 2 3"
| Mush22 a écrit : Et aussi, dans le second argument de mon preg_replace, j'ai mis //0 pour qu'il mette la chaine trouvée dans le première argument, ca ne marche pas, il faut mettre quoi? | 
$0 
les \\n sont des "back-"références" que tu peux utiliser dans ta pattern.
Marsh Posté le 19-10-2012 à 21:36:22
 
Bonjour, 
 
Je n'arrive pas à mettre en place correctement un "preg_replace" (php) pour faire ce qui suit. Pouvez vous m'aider ? 
 
 
======================= > 
======================= > CSS ORIGINAL :  
======================= > 
 
* { 
 clear:none; 
} 
 
article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { 
 display:block; 
} 
 
aside a, aside .a, aside p a, aside p .a { 
 color:#f7f7f7; 
} 
 
 
#informations_legales aside p a, #informations_legales aside p .a { 
 color:@666666; 
} 
 
audio, canvas, video { 
 display:inline-block; 
} 
 
audio:not([controls]) { 
 display:none; 
} 
 
======================= > 
======================= > TRANSFORMER DE CETTE MANIERE (dupliquer et ajouter sous forme de class portant le même non que le type de balise HTML5) :  
======================= > 
 
* { 
 clear:none; 
} 
 
article, .article, aside, .aside, details, .details, figcaption, .figcaption, figure, .figure, footer, .footer, header, .header, hgroup, .hgroup, nav, .nav, section, .section { 
 display:block; 
} 
 
aside a, .aside a, aside .a, .aside .a, aside p a, .aside p a, aside p .a, .aside p .a { 
 color:#f7f7f7; 
} 
 
 
#informations_legales aside p a, #informations_legales .aside p a, #informations_legales aside p .a, #informations_legales .aside p .a { 
 color:@666666; 
} 
 
audio, .audio, canvas, .canvas, video, .video { 
 display:inline-block; 
} 
 
audio:not([controls]), .audio:not([controls]) { 
 display:none; 
} 
 
 
======================= > 
======================= > LISTE DE BALISES HTML5 CONCERNEES : article|aside|audio|canvas|command|datalist|details|embed|figcaption|figure|footer|header|hgroup|keygen|mark|meter|nav|output|progress|rp|rt|ruby|section|source|summary|time|video|wbr 
======================= > 
 
Marsh Posté le 28-08-2008 à 15:26:58
Bonjour,
J'ai un petit problème avec une saleté d'expression régulière, j'aimerais de l'aide pour la construire.
Le principe est simple, je voudrais détecter dans une variable la chaîne de caractère suivante :
"à partir de ... €" --> sans les guillemets
Après moults essais, je n'y arrive pas.
merci d'avance.