Expression régulière : mot qui n'est pas dans une balise

Expression régulière : mot qui n'est pas dans une balise - PHP - Programmation

Marsh Posté le 17-12-2014 à 12:35:42    

Bonjour,
 
J'ai besoin d'écrire une expression régulière et je galère... Je galère car je voudrais réussir à le faire en une seule expression régulière, pour la beauté du geste. Le faire en plusieurs étapes, je saurais.
 
Voilà l'idée : Le nom de mon club est le MYCA, écrit dans une police particulière. Et un certain bateau du club s'appelle le MYCAJU. Et bien sûr, le mot MYCA revient également un peu partout dans les URLs, car c'est naturel de vouloir nommer des répertoires "dossier MYCA" ...  
 
Je voudrais traiter les posts sur le site de telle manière que :
 
MYCA soit remplacé par <span class="myca">MYCA</span>, sauf s'il est compris dans un autre mot comme MYCAJU, et sauf s'il est dans une adresse d'une URL.
 
Pour la première et deuxième partie, c'est assez simple :
 

Code :
  1. $stringEntree = preg_replace('#([\s\t\n\r>])(MYCA)([<\.\s\t\n\r])#','$1<span class="myca">MYCA</span>$3', $stringEntree);


 
MAIS
 
Pour dire que je ne veux pas faire ce remplacement si je me trouve dans une URL, je n'y arrive pas.
J'ai tenté sans conviction :
 

Code :
  1. $stringEntree = preg_replace('#[^(?:<a href=" )]([\s\t\n\r>])(MYCA)([<\.\s\t\n\r])[^(?:</a> )]#U','$1<span class="myca mot_myca">MYCA</span>$3', $stringEntree);


 
Mais ça ne marche évidemment pas.
 
Je n'ai pas d'idée pour réussir à le faire en un seul preg_replace.
 
Une idée ?

Reply

Marsh Posté le 17-12-2014 à 12:35:42   

Reply

Marsh Posté le 17-12-2014 à 14:41:50    

Sinon pour le faire en deux fois, la solution :
 
 

Code :
  1. $stringEntree = preg_replace('#([\s\t\n\r>])(MYCA)([<\.\s\t\n\r])#','$1<span class="myca">MYCA</span>$3', $stringEntree);
  2. $stringEntree = preg_replace('#(<a href=".+)(<span class="myca mot_myca">MYCA</span> )(.+> )#iU','$1MYCA$3',$stringEntree);


 
mais je trouve ça moche :o


Message édité par naeco le 17-12-2014 à 15:13:54
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed