JeuWeb - Crée ton jeu par navigateur
Reg Ex - Remplacer des mots sauf entre certaines balises - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Reg Ex - Remplacer des mots sauf entre certaines balises (/showthread.php?tid=5592)

Pages : 1 2


Reg Ex - Remplacer des mots sauf entre certaines balises - Wells - 27-07-2011

Bonjour à tous, voici un exemple de texte:

Code :
$texte = 'Du texte avec un titre : <h1>super titre</h1> mais vaux mieux cliquer <a href="lien du titre ici"> sur ce titre ci </a> pour un meilleur titre'

Je souhaite remplacer tous les "titre" sauf ceux entre les balises H1 et A ce qui donnerais:


Code :
$texte = 'Du texte avec un REMPLACE : <h1>super titre</h1> mais vaux mieux cliquer <a href="lien du titre ici"> sur ce titre ci </a> pour un meilleur REMPLACE'


Je me démène avec les preg_replace et les assertions complexes mais rien à faire j'y arrive pas.


Code :
$reg = '#((?<! href="\w) \bmot\b (?! </a>))#ix';//(?! .*h1)

Voici un de mes derniers tests. Si qq'un est caler la dedans je suis preneur d'une piste Smile


RE: Reg Ex - Remplacer des mots sauf entre certaines balises - niahoo - 27-07-2011

Est-ce que tu dois le faire plusieurs fois sur la même donnée ou une seule fois à l'enregistrement ?

Si c'est une seule fois, moi je prendrais un parseur HTML et je lui donnerais le texte à manger, comme ça tu peux manipuler tout ton texte et faire tes remplacements sauf là ou tu ne le souhaite pas.

Y a une librairie sympa en python dont je me souviens quand j'avais commencé python : http://diveintopython.org/html_processing/ le paragraphe 8.3 est pas mal pour ça.


RE: Reg Ex - Remplacer des mots sauf entre certaines balises - Ter Rowan - 27-07-2011

si j avais à le faire ..

je remplace d'abord titre dans <h1> et <A> par une chaine de mon crû qui n'est pas contenu dans le texte (genre zzz___zzz___zzz)

ensuite, je remplace titre partout

ensuite je remplace ma chaine (zzz___zzz___zzz) par titre


RE: Reg Ex - Remplacer des mots sauf entre certaines balises - Argorate - 27-07-2011

J'ai fais la meme "cheat" que Ter Rowan pour un problème de guillemets complexe durant mon stage.
C'est bien la galère, et ce genre d'"astuce" s'utilise selon moi qu'en derniers recours mais fonctionne très bien.

En fait, on renome le cas problèmatique, on fait les changements, puis on rerenomme (comme à l'origine) le cas problèmatique (qui ne l'ai plus après coup...) ^^


RE: Reg Ex - Remplacer des mots sauf entre certaines balises - niahoo - 27-07-2011

+1 j'ai déja utilisé ça aussi mais manuellement quand j'édite des gros fichiers texte dans un notepad. C'est une solution simple et pas trop du à automatiser en plus.

après je pense qu'il cherche plus une regex magique et pour le défi je pense que c'est très possible.


RE: Reg Ex - Remplacer des mots sauf entre certaines balises - Wells - 27-07-2011

Vous ferez le premier remplacement via une expression régulière du coup?
Non parceque in fine ca revient à faire l'opposer de ce que je fait durant la première étape.

Un exemple de reg exp qui fait ca please ^^


RE: Reg Ex - Remplacer des mots sauf entre certaines balises - Argorate - 27-07-2011

Tu remplaces les contenu des balise <h1> et <a> que tu veux garder en mettant _TITRE_A_CONCERVER_NUMERO_1_ à la place par exemple.
tu fait ton replace sur "titre", puis tu fais un replace sur _TITRE_A_CONCERVER_NUMERO_x_ et tu remets la valeur initiale (que tu as stocker au préalable), non?


RE: Reg Ex - Remplacer des mots sauf entre certaines balises - Wells - 27-07-2011

Ca j'avais compris, c'est l'expression régulière pour faire la première étape que je trouve pas. Faut dire que je suis pas doué avec reg exaspere...heu expression pardon Smile


RE: Reg Ex - Remplacer des mots sauf entre certaines balises - Argorate - 27-07-2011

Moi j'aurais pas utilisé de reg exp, un peu de lecture : http://www.jeuweb.org/showthread.php?tid=7047&pid=89358#pid89358 Wink
(meme si le nom de la fonction plait pas d'apres se que je viens de relire, tu as le droit de la changer! :p)


RE: Reg Ex - Remplacer des mots sauf entre certaines balises - Wells - 27-07-2011

Suite à un peu de creusement de cervelle:

Code :
$texte=' mot du texte <a href="mon lient mot de la">test mot ds</a> mon mot <h1> mon mot la aussi</h1>ici!';
$txt_remplace='mot';
$reg = '/\<a href="(.*)\b'.$txt_remplace.'\b(.*)">(.*)\b'.$txt_remplace.'\b(.*)\<\/a\>/';
$texte=preg_replace($reg, '<a href="$1'.md5($txt_remplace).'$2">$3'.md5($txt_remplace).'$4</a>', $texte);

$reg = '/\<h1\>(.*)\b'.$txt_remplace.'\b(.*)\<\/h1\>/';
$texte=preg_replace($reg, '<h1>$1'.md5($txt_remplace).'$2</h1>', $texte);
echo  "<br>".htmlentities($texte,ENT_IGNORE, "UTF-8");
$texte = str_replace($txt_remplace,'TEST',$texte);
$texte = str_replace(md5($txt_remplace),$txt_remplace,$texte);
echo  "<br>".htmlentities($texte,ENT_IGNORE, "UTF-8");

ce qui donne:

Code :
mot du texte <a href="mon lient de81459305398c88048a05a620fb4717 de la">test de81459305398c88048a05a620fb4717 ds</a> mon mot <h1> mon de81459305398c88048a05a620fb4717 la aussi</h1>ici!
TEST du texte <a href="mon lient mot de la">test mot ds</a> mon TEST <h1> mon mot la aussi</h1>ici!

est ce que qq'un voit qq chose de plus propre?