Remplacer par RegExp l'évaluation d'une operation arithmétique

Résolu
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016 - 21 juin 2006 à 21:14
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016 - 21 juin 2006 à 23:04
Salut,
Je bute sur un problème :
je parse une chaine de type équation mathématique ex (3x+(5*2) +3X3 +3X2) avec eregi_replace pour remplacer dans 1 premier temps toutes les opérations de nombres entiers ou réels par leur évaluation.

ici par exemple le résultat souhaité serait de récupérer la chaine suivante en retour :
3X + 10 + 3X3 +2X3.

A vrai dire ce n'est pas l'expression reguliere qui pose pb mais plûtôt le fait de savoir comment utiliser la fonction eval dans le paramètre de remplacement dans eregi_replace: voici ma fonction:
Ici l'ERE ne reconnait que l'opération (5*2) dans mon cas.
$strresult = eregi_replace('\(([0-9]+(\.[0-9]+)?[\+\-\/\*][0-9]+(\.[0-9]+)?)\)',eval('$res=\'\1\';'),$eqString))
         
PB: là eval ne renvoit pas la chaine $res.Et ma question : y a t'il une autre fonction similaire qui pourrait convenir ? si oui la quelle? 

1 réponse

guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
21 juin 2006 à 23:04
HOp la, si ça peut servir: 
J'ai pu contourner le pb de la manière suivante
while (ereg('\(([0-9]+(\.[0-9]+)?[\+\-\/\*][0-9]+(\.[0-9]+)?)\)',$eqString,$tab)){
         eval('$res='.$tab[1].';');
         $eqString = str_replace($tab[0],$res,$eqString);
     }
je sais que ça peut etre lourd  en proc de mettre une reg exp dans une boucle, mais bon.
3
Rejoignez-nous