Page 1 sur 1

preg_match_all + espace avant et après un chiffre à virgule

Posté : 09 avr. 2011, 21:54
par Boro64
Bonjour
Dans un champ "Prix", l'utilisateur peut rentrer des chiffre entiers ou à décimales, avec virgule ou point.
Pour les récupérer entre une balise </span> et une balise </p> je pensais utiliser cette regex:
preg_match_all('/<\/span>([ ]^\d+(?:[,.]\d+)?$[ ][€])<\/p>/U', $file, $listeprix);
mais..... rien! :?
Je me doute bien que le problème se situe entre le clavier et l'écran ( :mrgreen: ) mais là je sèche un peu...
Vous auriez une piste?
D'avance merci pour vos avis et conseils

Re: preg_match_all + espace avant et après un chiffre à virgule

Posté : 10 avr. 2011, 00:22
par Ryle
C'est entre le clavier et la chaise en principe... entre le clavier et l'écran y a souvent beaucoup de papier et un peu de poussière qui n'y sont pour rien ;)

Dans ton expression régulière ^ doit être placé au début (et $ à la fin) de l'expression si la chaine que tu traites doit impérativement commencer (et terminer) par une correspondance avec ton masque... au milieu ça va marcher beaucoup moins bien :)

Faudrait que tu nous montres une chaine à traiter, parce que la zone de saisie entre span et paragraphe, j'ai du mal à voir à quoi ca ressemble...

Re: preg_match_all + espace avant et après un chiffre à virgule

Posté : 10 avr. 2011, 03:06
par Boro64
Bonjour
Effectivement... :oops:
Voici le type de chaîne à traiter:
<p class="carte">Firmin et Peyo vous proposent cette semaine: :</p>
<p class="plat"><span>blablabla</span> 15 €</p>
<p class="plat"><span>Blebleble</span> 20 €</p>
<p class="plat"><span>Bliblibli</span> 50 €</p>
<p class="plat"><span>blobloblo</span> 75 €</p>
<p class="plat"><span class="note">C'est pas tous les jours fête!</span></p>
1) Ce que je cherche à récupérer ce place donc entre chaque </span> et </p> (le prix, donc)
2) il y un espace entre </span> et le chiffre et un espace entre celui-ci et €
3) Inévitablement avec mon type d'expression, je récupère dans mon résultat une ligne vide (le dernier </span></p>) : j'ai "résolu"(?) le problème en utilisant la fonction array_pop
Merci d'avance

Re: preg_match_all + espace avant et après un chiffre à virgule

Posté : 10 avr. 2011, 22:58
par Ryle
Il suffit donc juste d'écrire le masque tel que tu le décris :)

Code : Tout sélectionner

"#<\/span> (\d*) €</p>#Ui"

Re: preg_match_all + espace avant et après un chiffre à virgule

Posté : 11 avr. 2011, 11:20
par Boro64
Bonjour
Merci Ryle, mais....j'avais omis de préciser dans mon exemple, :mrgreen: , qu'il peut y avoir des nombres décimaux :oops:

De plus, je ne peux pas savoir avant, si l'utilisateur va utiliser le point ou la virgule comme séparateur.
J'ai donc écrit ceci ( Nota: Oui, j'ai retiré aussi la sélection du signe euro (€) ):
#<\/span> (\d*) | (\d*[.,]\d*) <\/p>#U
Mais, pas plus qu'avec ta solution je n'ai de résultat.... :shock: : au final, le résultat doit s'afficher dans des balises: <input type="texte />
Or dans mon test, je n'ai que 3 balises pour 4 attendues, et.....vide !!!!! :?
J'ai utilisé ce testeur en ligne, et avec
#(\d*)|(\d*[.,]\d*)#
, il me signale bien que seuls les chiffres entiers et décimaux sont intégralement sélectionnés.
J'avoue ne rien comprendre.....
Toute aide ou avis est évidemment la bienvenue...
D'avance merci encore
[édit]: NB: lorsque je met ceci
(.*)
ça marche (évidemment) bien,je sélectionne tout ...

Re: preg_match_all + espace avant et après un chiffre à virgule

Posté : 11 avr. 2011, 18:17
par stealth35
Pour parser du HTML c'est DOMDocument