Aide sur une expression régulière pour preg_replace()

Aide sur une expression régulière pour preg_replace() - PHP - Programmation

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.

Reply

Marsh Posté le 28-08-2008 à 15:26:58   

Reply

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


Message édité par Marty_McFly le 28-08-2008 à 16:55:21

---------------
arg(z) = pi /2 donc z = i, moi je prends pas
Reply

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


Message édité par Mush22 le 28-08-2008 à 16:59:36
Reply

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.


Message édité par anapajari le 28-08-2008 à 17:02:50

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

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 à "à"
€ à "€"

Reply

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}) €/


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 28-08-2008 à 17:10:14    

Oui je m'en rends bien compte :D D'ailleurs j'ai fait le test aussi en mettant les à etc... Ca ne fonctionne pas.

Reply

Marsh Posté le 28-08-2008 à 17:12:38    

Dans le contexte, la regex est comme ça :  
 
preg_replace("/&#224; partir de \d+(|\.\d{1,2}) &#8364;/",'<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é. "/&#224; partir de \d+(|\,\d{1,2}) &#8364;/"


Message édité par Mush22 le 28-08-2008 à 17:14:21
Reply

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.


Message édité par anapajari le 28-08-2008 à 17:21:04

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

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.

Reply

Marsh Posté le 28-08-2008 à 17:22:32   

Reply

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 :D

Reply

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?


/&#224;  partir de [\s\d]+(|\.\d{1,2}) &#8364;/


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.

 


Message édité par anapajari le 29-08-2008 à 14:12:57

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

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

Reply

Sujets relatifs:

Leave a Replay

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