Expression régulière

Petit nouveau ! | 3 Messages

12 janv. 2010, 20:39

Bonsoir à tous,

Voici mon problème, j'aimerais extraire un prix de type "12.50 €" ou "12,50 €" ou "12 €" d'une chaîne de caractère contenant
avant ce prix du texte (environ 100 caractères).

J'ai regardé du côté des expressions régulières mais je pense qu'il va me falloir du temps pour appréhender toute la syntaxe.
Peut-être que quelqu'un pourrait m'orienter vers une solution et m'expliquer son fonctionnement.

Merci d'avance pour votre aide précieuse,

Seb

Eléphant du PHP | 453 Messages

12 janv. 2010, 22:00

Hello,

Je fais vite un passage éclair. Pour les expressions rationnelles, je t'invite à parcourir ce site. Dans l'immédiat, ton soucis devrait être résolu par ceci :
$motif= "#\d+([.,]\d{2})? €#"; //PCRE
bonne soirée
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

Eléphant du PHP | 63 Messages

13 janv. 2010, 00:33

L'expression de Niuxe reflète l'idée du motif à appliquer mais le masque n'est pas bon (ne sélectionne pas les premiers chiffres).
<?php
$subject = 'Un prix de 12,30€ au lieu de 15 € soit 2.70€ de gagné !';
preg_match_all('/(\d+(?:[\.,][\d]{2})?)\s*€/', $subject, $matches);
print_r($matches[1]);
?>
Modifié en dernier par ooflorent le 15 janv. 2010, 22:36, modifié 1 fois.

Eléphant du PHP | 453 Messages

14 janv. 2010, 02:35

Hello,
L'expression de Nolem reflète l'idée du motif à appliquer mais le masque n'est pas bon (ne sélectionne pas les premiers chiffres).
En es tu sûr ?

En rapport avec ta chaine et en reprenant mon motif :
$motif= "#\d+([.,]\d{2})?( )?€#";
Bonne soirée
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

Petit nouveau ! | 3 Messages

15 janv. 2010, 10:48

Bonjour à tous et merci infiniment pour vos messages.
Je vais regarder de près vos solutions dans le courant de la journée.

Merci, je vous tiendrai informé en retour.

Seb

Petit nouveau ! | 3 Messages

15 janv. 2010, 11:03

<?php
$subject = 'Un prix de 12,30€ au lieu de 15 € soit 2.70€ de gagné !';
preg_match_all('/(\d+(?:[\.,][\d]{2})?)\s*€/', $subject, $matches);
print_r($matches[1]);
?>

Cette solution fonctionne bien pour mon cas.

Merci encore !

Seb

Eléphant du PHP | 63 Messages

15 janv. 2010, 22:37

Niuxe, ton premier \d n'est pas dans le sous-masque ! :wink:

Eléphant du PHP | 453 Messages

16 janv. 2010, 01:54

Niuxe, ton premier \d n'est pas dans le sous-masque ! :wink:
Effectivement, je viens de le voir en testant chez moi le script, il manque bien un sous-masque pour mieux capturer le tout. Autant pour moi. Bien vu :)
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia