Page 1 sur 1

expression régulière

Posté : 02 avr. 2009, 17:29
par Invité
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.

Posté : 02 avr. 2009, 17:51
par Ryle
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...

Posté : 02 avr. 2009, 18:46
par Invité
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?

Posté : 02 avr. 2009, 18:47
par Invité
je remets mon pattern en plus lisible

Code : Tout sélectionner

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

Posté : 02 avr. 2009, 18:50
par Invité
et j'ai dit une betise.
Le pattern ci-dessus me renvoie des éléments du type:
1
1.15

uniquement

Posté : 02 avr. 2009, 22:52
par Nours312
et un truc du style :

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

Posté : 03 avr. 2009, 02:15
par Invité
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 /

Posté : 03 avr. 2009, 09:29
par Nours312
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

@+