Bon je sais que ça n'est pas vraiment un problème PHP mais je ne savais pas ou mettre le message.
J'ai une liste de termes (immenses et dynamiques) que je dois entouré de balises.
Cependant, ces termes peuvent très similaires et je ne veux entourer que les chaines les plus longues (elles sont triés par longueur).
Par exemple : si j'ai "un ordinateur puissant" et "ordinateur", je ne veux mettre en gras que "un ordinateur puissant" dans mon texte et ne pas me retrouver avec
Code :
- <b>un <b>ordinateur</b> puissant</b>
|
Je souhaiterais utiliser preg_replace, qui me semble relativement efficace dans mon cas, et donc évidement les expressions régulières.
Mais la librairie qui gère les expressions n'accepte pas les expressions qui refuse des chaines qui n'ont pas de taille fixe comme celle ci :
J'ai ca comme base :
Code :
- /(?<!b> )LE TERME(?!<\\/b> )/i
|
qui me permet d'éviter de recréer des balises si le terme trouvé est directement précédé ou suivi par la balise.
Mais j'aurais besoin de pouvoir définir que s'il y a cette balise, alors même s'il y a du texte ou des espaces entre, il ne faut pas remettre une balise.
J'avais fait quelques choses comme ca : mais comme la taille de la chaine n'est pas fixe cela me fait une erreur :
Code :
- (?<!b>[A-z0-9\s]*)LE TERME(?!<\\/b> )/i
|
J'essaie de trouver une autre manière de formuler ca en regexp, mais j'avoue que je bloque complètement...
Est ce que quelqu'un aurait une idée ?