Bonjour,
J'ai un fichier texte avec des mots clé identifiés de cette façon {.mot_clé.} et je voudrais les extraire avec un preg_match_all mais pas moyen de trouver le bon pattern.
Est ce que quelqu'un pourrait m'aider.
Merci d'avance![]()
Bonjour,
J'ai un fichier texte avec des mots clé identifiés de cette façon {.mot_clé.} et je voudrais les extraire avec un preg_match_all mais pas moyen de trouver le bon pattern.
Est ce que quelqu'un pourrait m'aider.
Merci d'avance![]()
En fait je viens de trouver la solution à l'instant :
Mais j'ai un autre problème tout c..
Code : Sélectionner tout - Visualiser dans une fenêtre à part preg_match_all("@{.([^#]*).}@",$buffer,$no_cache);
Je voudrait prendre ce résultat et l'utiliser pour constituer le nom d'une variable de type POST dans un preg_replace mais pas moyen de trouver la bonne syntaxe :
Donc si vous avez une idée je suis preneur
Code : Sélectionner tout - Visualiser dans une fenêtre à part preg_replace('@{.$no_cache[1][0].}@', $_POST[$no_cache[0][1]], $buffer);![]()
Déjà ta première regex ne doit pas marcher correctement car tu n'échappes pas les points.
Moi j'aurais plutôt fait ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part "@{\.([^#]+)\.}@"
Les accolades ({ et }) sont également des métacaractères donc nécessitent, eux-aussi, échappement. En temps normal ils ont pour but d'indiquer le nombre d'occurrence. (même chose pour $ si vous veniez à le réutiliser, ancre indiquant la fin de la chaîne)
Quant à votre remplacement, si celui-ci doit être dynamique il faut se tourner vers preg_replace_callback ou le modificateur e. Le paramètre de remplacement (le deuxième de preg_replace) n'est évalué qu'une seule fois, au moment où votre fonction est exécutée. Exemple :
(vous pourrez trouver d'autres exemples si nécessaire sur ce même forum)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $in = '{.qui.} a mangé {.fruit.}'; $_POST = array('qui' => 'toto', 'fruit' => 'pomme'); $out = preg_replace('#\{\.([[:alnum:]_]+)\.\}#e', 'isset($_POST["\1"]) ? $_POST["\1"] : "\1"', $in); echo $out;
Partager