IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

eval après preg_replace [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    développeur javascript et PHP en rech d'emploi
    Inscrit en
    Juillet 2011
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : développeur javascript et PHP en rech d'emploi

    Informations forums :
    Inscription : Juillet 2011
    Messages : 85
    Par défaut eval après preg_replace
    j'utilise un vieux bouquin de PHP 4 pour apprendre PHP 5, que je traduis en lisant la doc sur le net.

    Mais là j'ai un problème de "traduction" pour la transformation de la formule f(x) en f($x) (que je fais ici "à la main" dans la fonction pour l'exemple.

    je ne comprends pas pourquoi easyPHP 5.3.9 (php.exe) me renvoie toujours l'erreur :

    Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    $t=array();
    $d=-M_PI;
    $fin=M_PI;
    $pas=M_PI/4;
    $formule="sin(x)";
    calcul ($t,$d,$fin,$pas,$formule);
     
    function calcul (&$t,$d,$fin,$pas,$formule) {
    	echo "\$d = $d";
    	echo "<br>\n";
    	echo "\$fin = $fin";
    	echo "<br>\n";
    	echo "\$pas = $pas";
    	echo "<br>\n";
    	$pattern="/[\\\$x]/";
    	echo "\$pattern = ---$pattern---";
    	echo "<br>\n";
     
    	$f=preg_replace('x',$pattern,$formule);
    	echo "\$f = '$f'";
    	echo "<br>\n";
    	if ($f===null) echo '$f===null<br>';
    	echo "<br>\n";
     
    	$pattern="#\\\$x#";
    	echo "\$pattern = ---$pattern---";
    	echo "<br>\n";
     
    	$f=preg_replace('x',$pattern,$formule);
    	echo "\$f = '$f'";
    	echo "<br>\n";
    	if ($f===null) echo '$f===null<br>';
     
    	$f='sin($x)';
    	for ($i=0,$x=$d;$x<= $fin;$x+=$pas) {
    		eval("\$t[\$i++] = $f;");
    		echo "$x : ".$t[$i-1]."<br>";
    	}
    	echo "<br>\n";
    	//affiche_grand_tableau($t);
    	//return $t;
    }

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    il me semble que l'ordre des paramètres de preg_replace() n'est pas correct.
    Et avec ceci, ça roule ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $f = preg_replace($pattern, 'x', $formule);

  3. #3
    Membre confirmé
    Homme Profil pro
    développeur javascript et PHP en rech d'emploi
    Inscrit en
    Juillet 2011
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : développeur javascript et PHP en rech d'emploi

    Informations forums :
    Inscription : Juillet 2011
    Messages : 85
    Par défaut Yes !
    merci.

    Je me doutais que c'était tout bête ! Je dois commencer à fatiguer ...

    Donc pour ceux qui seraient intéréssés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    $t=array();
    $d=-M_PI;
    $fin=M_PI;
    $pas=M_PI/4;
    echo sin(3*$fin),"<br>";
    $formule="sin(3*x)-2*cos(7*x);";
    //$formule="sin(3*x);";
    calcul ($t,$d,$fin,$pas,$formule);
    return;
    function calcul (&$t,$d,$fin,$pas,$formule) {
    	echo "\$d = $d";
    	echo "<br>\n";
    	echo "\$fin = $fin";
    	echo "<br>\n";
    	echo "\$pas = $pas";
    	echo "<br>\n";
    	$pattern="/x/";
    	echo "\$pattern = ---$pattern---";
    	echo "<br>\n";
     
    	$f = preg_replace($pattern, '$x', $formule); // suggérée par rawsrc sur : http://www.developpez.net/forums/d1198588/php/langage/regex/eval-apres-preg_replace/
    	echo "\$f = '$f'";
    	echo "<br>\n";
    	if ($f===null) echo '$f===null<br>';
    	echo "<br>\n";
     
    	for ($i=0,$x=$d;$x<= $fin;$x+=$pas) {
    		eval("\$t[\$i++] = $f;");
    		echo "f($x) = ".$t[$i-1]."<br>";
    	}
    	echo "<br>\n";
    	//affiche_grand_tableau($t);
    	//return $t;
    }
    bonjouoir à toi rawsrc, et merci bcp !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] preg_replace un caractère avec espace avant et après
    Par redah75 dans le forum Langage
    Réponses: 24
    Dernier message: 27/09/2011, 21h35
  2. Réponses: 1
    Dernier message: 19/04/2008, 17h34
  3. action APRES chargement complet ...
    Par PinGuy dans le forum Delphi
    Réponses: 7
    Dernier message: 06/07/2006, 18h16
  4. [interbase]Se logger après une première installation
    Par Ultra-FX dans le forum InterBase
    Réponses: 3
    Dernier message: 13/09/2002, 12h44
  5. Comment ne pas rejouer une animation après un clic ?
    Par mmmmhhh dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 04/09/2002, 17h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo