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.