Reg Ex - Remplacer des mots sauf entre certaines balises

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Reg Ex - Remplacer des mots sauf entre certaines balises

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

par Blowingfish » 02 août 2011, 07:28

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.

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

par Wells83 » 01 août 2011, 11:46

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

par Blowingfish » 30 juil. 2011, 05:58

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

par devlop78 » 28 juil. 2011, 15:31

Reponse pour suivre le sujet.

Reg Ex - Remplacer des mots sauf entre certaines balises

par Wells83 » 27 juil. 2011, 14:24

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