[RESOLU] Regex : insersion de la capture dans une variable

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Regex : insersion de la capture dans une variable

Re: Regex : insersion de la capture dans une variable

par AinaB » 23 août 2013, 13:42

Eh bien figurez-vous que j'ai trouvé !
Le problème que j'avais est que je cherchais une erreur de syntaxe dans la façon où j'essayais d'utiliser ma variable... mais je n'utilisais tout simplement pas les bonnes fonctions.

Voici ce que j'ai fait pour que ça fonctionne, si ça en intéresse :

Au lieu de ça :
$texte = preg_replace('#\[((exp1|exp2|exp3)\.[a-zA-Z0-9]+)\]#isU', $var['$1'], $texte);
/* et autres variantes plus ou moins détaillées dans le premier post */
Il faut faire ça :
$texte = preg_replace_callback('#\[((exp1|exp2|exp3)\.[a-zA-Z0-9]+)\]#isU', 'varInterpretation', $texte);
function varInterpretation($varNom) {
	global $var; /*Ma variable est déjà définie à l'extérieur de cette fonction*/
	return $var[$varNom[1]];
}
J'ai donc découvert la fonction preg_replace_callback() que je ne connaissais pas ! :)

Regex : insersion de la capture dans une variable

par AinaB » 22 août 2013, 19:26

Bonjour à tous,
ceci est mon premier post et le titre est déjà pas très clair, désolé !

Le problème que je rencontre est le suivant : je cherche à convertir une chaîne de type "blablabla [exp1.truc] blablabla" en "blablabla $var['exp1.truc'] blablabla", où la variable $var s'affiche directement (par exemple "blablabla blo blablabla" si $var['exp1.truc']=="blo").

J'ai essayé plusieurs variantes de ce genre :
 $texte = preg_replace('#\[((exp1|exp2|exp3)\.[a-zA-Z0-9]+)\]#isU', $var['$1'], $texte);
 $texte = preg_replace('#\[((exp1|exp2|exp3)\.[a-zA-Z0-9]+)\]#isU', $var['"$1"'], $texte); /*( " dans ' )*/
 $texte = preg_replace('#\[((exp1|exp2|exp3)\.[a-zA-Z0-9]+)\]#isU', $var["'$1'"], $texte); /*( ' dans " )*/
 $texte = preg_replace('#\[((exp1|exp2|exp3)\.[a-zA-Z0-9]+)\]#isU', $var['"'.'$1'.'"'], $texte);
...et peut-être d'autres que j'ai oubliées, mais à chaque fois en reprenant l'exemple ça ne m'affiche que "blablabla blablabla", même si $var[...] est bien renseigné.

J'espère qu'avec mon explication et mes exemples vous voyez à peu près ce que je souhaite obtenir, c'est pas simple à expliquer ^^

Toutes les recherches que j'ai faites sur le net en rapport avec des variables et des regexp m'ont menées à des problèmes liés aux variables dans l'expression même, et non dans le remplacement.

Est-ce que quelqu'un a déjà rencontré ce cas de figure et peut m'expliquer comment il s'en est sorti ?

Merci d'avance !