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