Je reviens sur mon post, d’il y a...
Le premier problème vient que après \b, une lettre accentuée est considérée comme le début d’un autre mot. (comme je peux me passer des docteurs, présidents [1] et saint(e)s et vais me passer d’une partie du filtre.
Le deuxième problème est résolu en décomposant la dernière ligne en deux parties.
Donc voici la fonction voltaire_exposant modifiée pour résoudre seulement le 2e problème.
function voltaire_exposant($texte){
$trouve = array(
'/(\\bM)(elle|lle)\\b/', // Mlle(s), Mme(s) et erreurs Melle(s)
'/(\\bM)(elles|lles)\\b/',
'/(\\bM)(mes?)\\b/',
'/(\\bD)(rs?)\\b/', // Dr(s), Pr(s), St(e)(s)
'/(\\bP)(rs?)\\b/',
'/(\\bS)(te?s?)\\b/',
'/(\\bm)(2|3)\\b/', // m2, m3
'/(\\b[1I])(ier)\\b/', // Erreurs ier, iers, ère, ière, ères, ières
'/(\\b[1I])(iers)\\b/',
'/(\\b[1I])(ière|ère)\\b/',
'/(\\b[1I])(ières|ères)\\b/',
'/(\\b[02-9IVX]+)(ième|ème|me)\\b/', // Erreurs me, ème, ième, mes, èmes, ièmes
'/(\\b[02-9IVX]+)(ièmes|èmes|mes)\\b/',
'/(\\b[1I])(res?)\\b/', // 1re(s), Ire(s)
'/(\\b[1I])(er?s?)\\b/', // 1er(s), Ier(s)
'/(\\b[0-9IVX]+)(es?)\\b/' // 2e(s), IIIe(s)...
);
$remplace = array(
'M<span class="exposant">lle</span>', // Mlle(s), Mme(s)
'M<span class="exposant">lles</span>',
'M<span class="exposant">\\2</span>',
'D<span class="exposant">\\2</span>', // Dr(s), Pr(s), St(e)(s)
'P<span class="exposant">\\2</span>',
'S<span class="exposant">\\2</span>',
'm<span class="exposant">\\2</span>', // m2, m3
'\\1<span class="exposant">er</span>', // Corrige 1er(s), 1re(s)
'\\1<span class="exposant">ers</span>',
'\\1<span class="exposant">re</span>',
'\\1<span class="exposant">res</span>',
'\\1<span class="exposant">e</span>', // Corrige 2e(s), IIIe(s)...
'\\1<span class="exposant">es</span>',
'\\1<span class="exposant">\\2</span>', // 1re(s), Ire(s)
'\\1<span class="exposant">\\2</span>', // 1er(s), Ier(s)
'\\1<span class="exposant">\\2</span>' // 2e(s), IIIe(s)...
);
$texte=preg_replace($trouve, $remplace, $texte);
return $texte;
}
Claude
Répondre à ce message