Re: aide expression régulière

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: guilde
Subject: Re: aide expression régulière
Vincent Caron a écrit :
> [$text = "1.23e+3"]
>   if (preg_match('/(\d+)\.(\d+)e([+-]\d)/', $text, $matches)) {
>     array_shift($matches);
>     ...
>   }


J'ajouterais "?" pour le signe de l'exposant, car il est fréquant qu'il soit
omis s'il est positif. Et il faut aussi un "+" après car il peut être plus
grand que 9 (comme dans le nombre d'Avogadro : 6.02e23). Donc

      /(\d+)\.(\d+)e([+-]?\d+)/


Reste à savoir si autorise l'absence de partie décimale (6e23), si a le droit
de mettre un point dans ce cas là (6.e23) et si on peut omettre l'exposant
(3.14 au lieu de 3.14e0). Une regexp qui permet tout ça :

     /(\d+)(\.(\d*))?(e([+-]?\d+))?/


Puis tu récupères $matches[1], $matches[3] et $matches[5], les deux derniers
pouvant être vides.

Edgar.