bonjour à tous,
comment indiquer une limite de mot dans une regex, quand le mot commence ou fini par &.#...; donc une entité numérique de caractère accentué (ISO-8859-1)
(Je place un point entre & et # dans le code ci-dessous car j'ignore s'il sera interprété)
Dans un script php, j'ai besoin de remplacer un mot issu d'une variable contenant un texte html. Ce mot peut bien sûr comporter des accents et les caractères accentués se présentent sous au moins deux formes possibles en raison des différents éditeurs utilisés pour la rédaction du texte : exemple é et &.#233; (voire même &.eacute;)
Aucun soucis avec les caractères accentués normaux (é)
par contre, les entités &.#233; (ou é) empêchent l'interpretation de la limite de mot lorsqu'ils sont placés au début ou à la fin du mot. Du coup, tout se passe comme si les \b de la regex n'étaient pas présents.
si j'utilise un logiciel testeur de regex (exemple regex coach), je constate aussi le problème.
Exemple, cas du mot commençant par un caractère accentué :
dans le texte, je place : établi, rétabli, &.#233;tabli, r&.#233;tabli
en testant la regex : \b(établi|&.#233;tabli)\b
les caractères accentués "normaux" ne posent pas de problème : établi est trouvé, rétabli ne l'est pas.
Mais &.#233;tabli n'est pas trouvé alors que r&.#233;tabli, oui, comme si il n'y avait pas de limite de mot \b.
Même constat avec un caractère accentué à la fin : clé, clés et cl&.#233;, cl&.#233;s
la regex : \b(clé|cl&.#233;)\b
clé est trouvé et pas clés donc c'est parfait.
Mais cl&.#233; n'est pas trouvé (il le devrait pourtant) et cl&.#233;s est trouvé montrant que la limite de mot avant ne fonctionne pas.
Bien sûr, si je fais \bcl&.#233;\b, le problème est le même.
j'ai beau chercher parmis les nombreuses docs volumineuses que l'on peut trouver sur le net (preg_replace, PCRE, caractères ISO...), je ne vois pas de solution.
merci de vos réponses,
cordialement,
Ludo
