Citation (K20 @ 23 Aug 2008, 17:28)

Ba après c'est surtout niveau performance, utiliser direct une regexp sera plus rapide que ton 2e code, mais si ton 2e fonctionne et que sur tes tests ça prend pas trop longtemps utilise la 2e méthode

En faites ils ne fonctionnent pas parfaitement ^^
Car le problème, c'est qui ne prenait pas en compte les bons paramêtres pour les bonnes fonctions ^^
Donc maintenant je me retrouve avec un truc comme ça :
Code
echo"<pre>".print_r($match,true)."</pre><hr />";
$function = $match[1];
$param = $this->parse($match[2]);
$param = explode(',',$param);
echo"<pre>".print_r($param,true)."</pre><hr />";
return call_user_func_array($function,$param);
Sauf que maintenant, je ne vois pas comment faire pour rajouter le
} de fin, car il se peut que la chaine ne soit pas en dernière position

Et aussi, si je fais un truc du genre :
Citation
{func=test:{func=substr:{var.titre},0,200},Tutu}
Il ne prend pas en compte le
Tutu}, alors qu'il devrait le prendre :'(
Edit : Enfin !!

, j'ai enfin réussi, à force d'essayer un peut toute les options des regex, je suis tombé sur le U qui marche très bien (c'est pour l'option gourmande du ?

) ^^
Donc avec la regex principale :
Code
|{func=(.*):(.*?)}|U
Pour le texte suivant :
Citation
Ma fonction spéciale = {func=test:{func=substr:{var.titre},0,200},Tutu}
J'ai comme résultat ça :
Citation
Array
(
[0] => {func=test:{func=substr:titi,0,200},Tutu}
[1] => test
[2] => {func=substr:titi,0,200},Tutu
)
[Edit2] Voila, ne trouvant pas de solution, j'ai fait un truc mais vraiment trop pas optimiser, mais il marche :s
Donc voici le code, qui pour ma phrase de départ :
Citation
{func=substr:titi,0,2},Tutu,{func=substr:toto

,0,2}
Et je voudrais avoir comme résultat un truc du genre :
Citation
Array
(
[1] => {func=substr:titi,0,2}
[2] => Tutu
[3] => {func=substr:toto

,0,2}
)
Me retourne tout ce que je voulais :
Code
$function = $match[1];
$param = explode(',', $match[2]); // On explode selon les ,
$func = false; // Par défault on n'est pas dans une fonction
$key = 0; // On initialise à 0
foreach($param as $value){ // On liste tout nos paramêtres
if(ereg('{',$value)){ //Si on est en début de fonction, on incrémente $key, et on indique que l'on est dans une fonction
$func = true;
$key++;
}
if($func){
if(strlen($tmp[$key]) != 0){ //Vérifie pour éviter de mettre une virgule devant le {func
$tmp[$key].= ',';
}
$tmp[$key].= $value;
}else{ //Si on n'est pas dans une fonction, on ajoute directement la value dans le tableau
$tmp[$key] = $value;
}
if(ereg('}',$value)){
$func = false;
$key++;
}
}
Donc voila, si quelqu'un à des idées pour les optimisations, car là j'ai fais ça sans réfléchir, juste pour que ça marche ^^