[Regex] Problème récup variable

Eléphanteau du PHP | 15 Messages

28 nov. 2008, 23:12

Bonjour,
J'essaie depuis un certain temps de trouver une solution à mon problème, mais pas moyen de trouver la syntaxe qui correspond.
Mon script récupère le contenu d'une page texte et le met dans un buffer. Dans ce contenu je cherche des "variable" qui ont la forme {.ma_variable.} de façon à pouvoir la remplacer par $_POST['ma_variable'] dans le buffer que je ré-affiche (en gros c'est un petit moteur de template).
Donc j'avais pensé a utiliser un preg_replace au début pour changer mon {. en $_POST[' et mon .} en rien du tout mais je n'y arrive pas. Ensuite j'ai utilisé un preg_match_all mais pas moyen de recomposer ma variable en post une fois récupérée du buffer. :cry:

Donc je m'adresse à vous pour avoir un coup de pouce. :roll:
Je vous remercie d'avance.

Mammouth du PHP | 1668 Messages

29 nov. 2008, 12:58

Bonjour,

pourrais-tu nous montrer ton code, personnellement, j'aurais tenté un preg_replace_callback :
function cherche_variable($matches)
{
   if(isset($_POST[$matches[1]])
   {
      return $_POST[$matches[1]];
   }
   else
   {
       return '';
   }
}

// le regex
preg_replace_callback('#\{\.([a-zA-Z0-9_\-]+)\.\}#', 'cherche_variable', $buffer);
En gros je teste l'existence de la variable et je la renvoie si elle éxiste (dans ma fonction). Le REGEX, quand à lui, appèle la fonction à chaque "hit"
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Invité
Invité n'ayant pas de compte PHPfrance

29 nov. 2008, 21:38

katagoto, il manque une parenthèse fermante sur cette ligne :
if(isset($_POST[$matches[1]]))
( et ça marche :) )

une autre solution du même genre :
<?php
$_POST['ma_variable']        = 'le_contenu_de_ma_variable';
$_POST['mon_autre_variable'] = 'le_contenu_de_mon_autre_variable';

$txt = 'mon texte avec {.ma_variable.} et {.mon_autre_variable.} pour le test';

$txt = preg_replace('/\{\.(.+)\.\}/Ue', '@$_POST["$1"]', $txt);

echo $txt;

?>

Mammouth du PHP | 1668 Messages

30 nov. 2008, 10:55

Bonjour,

Oui désolé, mais avec ZDE on prend vite l'habitude de ne faire que modéliser :lol:

Si non, le problème de cette solution, c'est que ça va juste remplacer par un "appel", sans l'exécuter, et de plus, en développement, le masquage des erreurs est peu recommander :/
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Invité
Invité n'ayant pas de compte PHPfrance

30 nov. 2008, 12:15

... le problème de cette solution ...
parlant de ta solution, tu voulais sans doute dire "l'avantage" :)

ta solution est de toute façon plus rapide :wink:

Mammouth du PHP | 1668 Messages

30 nov. 2008, 13:27

Le problème de cette :
<?php 
$_POST['ma_variable']        = 'le_contenu_de_ma_variable'; 
$_POST['mon_autre_variable'] = 'le_contenu_de_mon_autre_variable'; 

$txt = 'mon texte avec {.ma_variable.} et {.mon_autre_variable.} pour le test'; 

$txt = preg_replace('/\{\.(.+)\.\}/Ue', '@$_POST["$1"]', $txt); 

echo $txt; 

?> 
solution...

Tu va avoir ça dans ton (x)html :
mon texte avec @$_POST['ma_variable'] et @$_POST['mon_autre_variable'] pour le test
ça sera pas interprêter...

C'est ça que je voulais dire...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Invité
Invité n'ayant pas de compte PHPfrance

30 nov. 2008, 13:57

C'est ça que je voulais dire...
ok, je n'avais pas compris ça ...
Tu va avoir ça dans ton (x)html :
mon texte avec @$_POST['ma_variable'] et @$_POST['mon_autre_variable'] pour le test
ça sera pas interprêter...
chez moi j'ai bien :
mon texte avec le_contenu_de_ma_variable et le_contenu_de_mon_autre_variable pour le test
il est vrai que je teste avec PHP 4.3.10 :oops:
est-ce lié à la version ?

Mammouth du PHP | 1668 Messages

30 nov. 2008, 15:47

Non, j'ai dût sous-estimer PHP, si ça marche, tant mieux,

ta question est résolue ?
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Invité
Invité n'ayant pas de compte PHPfrance

30 nov. 2008, 17:36

Non, j'ai dût sous-estimer PHP, si ça marche, tant mieux
tu n'as pas choisi l'expérience :)
c'est bon de rêver aussi ... :wink: