I would recommend the stability/reliability of using DOMDocument & XPath, then use regex on text nodes that do not occur inside of <a>
tags.
Using case-insensitive and multibyte pattern modifiers seems like an appropriate inclusion.
Code: (Demo)
$text = <<<TEXT
<div>
L’usine de Pessac, en Gironde, produit chaque jour environ 5 millions de pièces de monnaie. Leur fabrication repose sur des processus industriels extrêmement exigeants et de nombreuses manipulations. Des contrôles qualité sont effectuées à toutes les étapes. Celles-ci nécessitent des savoir-faire parfois multi-séculaires, mais aussi des techniques de pointe.
La gravure intervient ensuite pour concevoir et réaliser coins et poinçons. Ces matrices de frappe sont des blocs d’acier qui fonctionnent par paire, de manière à graver simultanément l’avers et le revers d’une monnaie. Ainsi, les effigies, inscriptions et éléments décoratifs d'une monnaie sont gravés en creux et à l’envers sur le coin, en relief et à l’endroit sur le poinçon.
<a href="">monnaie</a> est plus encore!
Les pièces fabriquées à Pessac sont mono-colores ou bi-colores : par un procédé breveté, la <a class="esk-seo-plu-link" href="https://abc.quaidesbalises.com/tags/monnaie-de-paris">Monnaie de Paris</a> peut assembler une couronne et un coeur au moment même de la frappe de la pièce. A noter que certaines monnaies de collection bénéficient d’une finition spéciale appelée « brillant universel ». Frappées avec un outillage neuf, ces pièces ont un aspect brillant et sont dépourvues de traces de dégradation, puisqu'elle n'ont jamais circulé.
MONNAIE DE PARIS: <a class="esk-seo-plu-link" href="https://abc.quaidesbalises.com/tags/-de-paris">MONNAIE DE PARIS</a> : c'est top
</div>
TEXT;
$pattern = '/\b' . preg_quote('monnaie', '/') . '\b/iu';
$dom = new DOMDocument;
$dom->loadHTML($text, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
foreach ($xpath->query("//*[not(ancestor-or-self::a)]/text()") as $node) {
$node->nodeValue = preg_replace($pattern, "**$0**", $node->nodeValue);
}
echo utf8_decode($dom->saveHTML($dom->documentElement));
Output:
<div>
L’usine de Pessac, en Gironde, produit chaque jour environ 5 millions de pièces de **monnaie**. Leur fabrication repose sur des processus industriels extrêmement exigeants et de nombreuses manipulations. Des contrôles qualité sont effectuées à toutes les étapes. Celles-ci nécessitent des savoir-faire parfois multi-séculaires, mais aussi des techniques de pointe.
La gravure intervient ensuite pour concevoir et réaliser coins et poinçons. Ces matrices de frappe sont des blocs d’acier qui fonctionnent par paire, de manière à graver simultanément l’avers et le revers d’une **monnaie**. Ainsi, les effigies, inscriptions et éléments décoratifs d'une **monnaie** sont gravés en creux et à l’envers sur le coin, en relief et à l’endroit sur le poinçon.
<a href="">monnaie</a> est plus encore!
Les pièces fabriquées à Pessac sont mono-colores ou bi-colores : par un procédé breveté, la <a class="esk-seo-plu-link" href="https://abc.quaidesbalises.com/tags/monnaie-de-paris">Monnaie de Paris</a> peut assembler une couronne et un coeur au moment même de la frappe de la pièce. A noter que certaines monnaies de collection bénéficient d’une finition spéciale appelée « brillant universel ». Frappées avec un outillage neuf, ces pièces ont un aspect brillant et sont dépourvues de traces de dégradation, puisqu'elle n'ont jamais circulé.
**MONNAIE** DE PARIS: <a class="esk-seo-plu-link" href="https://abc.quaidesbalises.com/tags/-de-paris">MONNAIE DE PARIS</a> : c'est top
</div>
Note, I am using the advice from this answer to prevent the encoding of multibyte characters. This may or may not be necessary depending on what is happening in your application.