Page 1 sur 1

[Regex] Problème récup variable

Posté : 28 nov. 2008, 23:12
par shelko
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.

Posté : 29 nov. 2008, 12:58
par katagoto
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"

Posté : 29 nov. 2008, 21:38
par Invité
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;

?>

Posté : 30 nov. 2008, 10:55
par katagoto
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 :/

Posté : 30 nov. 2008, 12:15
par Invité
... 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:

Posté : 30 nov. 2008, 13:27
par katagoto
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...

Posté : 30 nov. 2008, 13:57
par Invité
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 ?

Posté : 30 nov. 2008, 15:47
par katagoto
Non, j'ai dût sous-estimer PHP, si ça marche, tant mieux,

ta question est résolue ?

Posté : 30 nov. 2008, 17:36
par Invité
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: