Problème regex + array_keys

Résolu/Fermé
Utilisateur anonyme - Modifié par Pyraah le 26/05/2015 à 03:04
 Utilisateur anonyme - 26 mai 2015 à 03:08
Bonjour, j'ai un petit souci en PHP. Voici mon code, j'explique après :

$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.



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 :

$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.
0