Preg_replace : problème avec les expressions régulières

Claire_n
Invité n'ayant pas de compte PHPfrance

03 mars 2009, 13:11

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 : Tout sélectionner

<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 :

Code : Tout sélectionner

(?<![a-z0-9\s]*)
J'ai ca comme base :

Code : Tout sélectionner

/(?<!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 : Tout sélectionner

(?<!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 ?

Petit nouveau ! | 5 Messages

03 mars 2009, 23:29

Bonjour,

tu devois utiliser un déboguer pour des expressions régulières:
http://kodos.sourceforge.net/ (Kodos)

Bonne chance et bon courage pour votre projet!
Innocentus

Claire_n
Invité n'ayant pas de compte PHPfrance

04 mars 2009, 19:00

merci pour le lien ! ca me sera très utile !