Problème regex + array_keys
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour, j'ai un petit souci en PHP. Voici mon code, j'explique après :
Il s'agit d'un petit script glossaire qui détecte un mot puis qui ajoute du code HTML autour.
Pour l'instant j'ai ma regex dans mon array (et ça fonctionne). Pour des raisons de simplicité, j'aimerais mettre la regex au moment d'effectuer le preg_replace.
J'ai essayé quelque chose comme ceci :
Mais je me retrouve avec l'erreur "Warning: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array".
Du coup je bloque totalement. Est-il possible de mettre une regex à cet endroit ?
Merci de m'aider.
$pre_lexique = "<span class='tooltip'>"; $span = "<span>"; $post_lexique = "</span></span>"; $lexique = array ( '/\bmot\b/u' => $pre_lexique . "mot" . $span . "Définition en tooltip" . $post_lexique ); preg_replace(array_keys($lexique), $lexique, $content);
Il s'agit d'un petit script glossaire qui détecte un mot puis qui ajoute du code HTML autour.
Pour l'instant j'ai ma regex dans mon array (et ça fonctionne). Pour des raisons de simplicité, j'aimerais mettre la regex au moment d'effectuer le preg_replace.
J'ai essayé quelque chose comme ceci :
preg_replace("/\b" . array_keys($lexique) . "\b/u", $lexique, $content);
Mais je me retrouve avec l'erreur "Warning: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array".
Du coup je bloque totalement. Est-il possible de mettre une regex à cet endroit ?
Merci de m'aider.
A voir également:
- Problème regex + array_keys
- Regex buddy - Télécharger - Édition & Programmation
- Regex tout sauf - Forum Java
- Regex ne commence pas par ✓ - Forum Programmation
- Regex pour evitez la répétition des caractères - Forum PHP
- Regex mot de passe ✓ - Forum Framework .NET
1 réponse
Tout bien réfléchi ce n'est pas une bonne idée.
J'ai fini par modifier mon code comme ceci, en exploitant la regex autrement :
Explication : les mots à convertir sont précédés d'un triple underscore (_). Cette solution me permet de choisir à quel moment je veux insérer une définition dans mon texte.
Et à la fin je supprime les triple underscores qui ne sont pas associés à une définition. Ça me permet de créer un glossaire simple à mettre à jour et je peux ainsi supprimer totalement une définition sans laisser de traces visibles dans mon texte.
En espérant que ça puisse servir à d'autres.
J'ai fini par modifier mon code comme ceci, en exploitant la regex autrement :
$pre_lexique = "<span class='tooltip'>"; $span = "<span>"; $post_lexique = "</span></span>"; $lexique = array ( '/\b___mot\b/u' => $pre_lexique . "HTML" . $span . "<b>Hyper Text Markup Langage :</b><br/>Langage informatique servant à la conception de sites internet." . $post_lexique, '(___)' => "" ); preg_replace(array_keys($lexique), $lexique, $content);
Explication : les mots à convertir sont précédés d'un triple underscore (_). Cette solution me permet de choisir à quel moment je veux insérer une définition dans mon texte.
Et à la fin je supprime les triple underscores qui ne sont pas associés à une définition. Ça me permet de créer un glossaire simple à mettre à jour et je peux ainsi supprimer totalement une définition sans laisser de traces visibles dans mon texte.
En espérant que ça puisse servir à d'autres.