Page 1 sur 1

Reg Ex - Remplacer des mots sauf entre certaines balises

Posté : 27 juil. 2011, 14:24
par Wells83
Bonjour à tous, voici un exemple de texte:

Code : Tout sélectionner

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

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

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

Re: Reg Ex - Remplacer des mots sauf entre certaines balises

Posté : 28 juil. 2011, 15:31
par devlop78
Reponse pour suivre le sujet.

Re: Reg Ex - Remplacer des mots sauf entre certaines balises

Posté : 30 juil. 2011, 05:58
par Blowingfish
Je pense avoir trouvé la solution ...

Code : Tout sélectionner

/(titre)|(?:<[A-z 0-9]{2}>[A-z ]+<\/[A-z 0-9]{2}>)|(?:<a [^>]+>[^<>]+<\/a>)/i
J'explique :

Je commence par dire ce que je cherches, donc "titre".

Code : Tout sélectionner

(titre)
Ensuite, je veux exclure les "titre" qui sont entre les balises "h1" et "a".

Premièrement, le "h1" (je l'ai mit flexible, donc il fonctionne avec h1, h2, h3, h4, h5 et h6).

Code : Tout sélectionner

(?:<[A-z 0-9]{2}>[A-z ]+<\/[A-z 0-9]{2}>)
Deuxièmement, le "a".

Code : Tout sélectionner

(?:<a [^>]+>[^<>]+<\/a>)
Au final, tous les "titre" seront dans la variable "$1" et tu n'as plus qu'à écrire quelque chose comme : $1 = 'Nouveau titre';

Voilà, j'espère que ça marchera ! :D

Re: Reg Ex - Remplacer des mots sauf entre certaines balises

Posté : 01 août 2011, 11:46
par Wells83
Merci a toi, j'ai changer mon fusil d'épaule en passant par un parseur XML, mais ça fait tjs plaisir de pouvoir étudier ta solution.

Re: Reg Ex - Remplacer des mots sauf entre certaines balises

Posté : 02 août 2011, 07:28
par Blowingfish
Cherchais-tu quelque chose de plus spécifique ou alors ma regex est exactement ce que tu as besoin ? Je peux la modifier au besoin.