expression régulière

Invité
Invité n'ayant pas de compte PHPfrance

02 avr. 2009, 17:29

Bonjour,
J'ai une chaine qui est comme ceci:
Nombre de diapositives (2,35€/diapositive)
Comment faire pour récupérer le montant en euros (sans le signe €, juste le montant) avec une expression régulière, sachant que les montants peuvent varier et les autres mots de la phrase également?

Par exemple, je peux avoir
Quantité de photos(5€/photo)
J'ai tenté ceci sans succès
	preg_match('#^[0-9],[0-9]€$#', $attribute['title'], $prix);
Merci pour un éventuel coup de main si ça vous inspire.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 avr. 2009, 17:51

En fait, tu veux capturer tout ce qui se trouve entre la parenthèse ouvrante et le caractère euro ?

En version barbare :

Code : Tout sélectionner

#\((.*)€#
Après tu peux remplace le ".*" par quelque chose de plus fin selon ton besoin pour n'avoir que des chiffres ou une virgule...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

02 avr. 2009, 18:46

merci pour la réponse. ton pattern ne semble pas fonctionner.
Après quelques tentatives, j'ai trouvé ceci:
#[0-9]€$|[0-9],?[0-9]?[0-9]?#
ça me renvoie tous les chiffres du type:
1
1.1
1.5

Juste pour optimiser, y aurait-il un moyen plus efficace d'écrire cela?

Invité
Invité n'ayant pas de compte PHPfrance

02 avr. 2009, 18:47

je remets mon pattern en plus lisible

Code : Tout sélectionner

#[0-9]€$|[0-9],?[0-9]?[0-9]?#

Invité
Invité n'ayant pas de compte PHPfrance

02 avr. 2009, 18:50

et j'ai dit une betise.
Le pattern ci-dessus me renvoie des éléments du type:
1
1.15

uniquement

Mammouth du PHP | 661 Messages

02 avr. 2009, 22:52

et un truc du style :

#\(([0-9,.*)€# .. non ?

Invité
Invité n'ayant pas de compte PHPfrance

03 avr. 2009, 02:15

je crois qu'il te manque ] pour avoir [0-9].
Mais même avec l'accolade, ça ne marche pas.

Je récapitule ce que je souhaite faire:
récupérer toute valeur entière ou décimale qui commence par ( et se termine par /

Mammouth du PHP | 661 Messages

03 avr. 2009, 09:29

Salut : en effet, j'étais fatigué hier au soir !! ;)


$var = array('(2.35€/diapositive) ', '(1,56€)', 'Quantité de photos(5€/photo)');
foreach($var as $v){
	if(ereg('\(([0-9,.])*', $v, $prix)) echo substr($prix[0], 1).'<br />';
}

cela te convient-il ? j'ai gardé la parenthèse dans la capture avec substr, pour M'assurer que les nombres pris en considération suivent une ' ( ' et éviter de prendre 12 dans quantité de lot de 12 pieces (2€/lots).

et j'ai pris en considération les ' . ' et les ' , ' pour ... je sais pas ! ? :d

@+