J'ai un pb qui, a mon avis, doit etre résolu avec les PCRE.
Mon PB: J'ai du code HTML, je dois remplacé un mot par un autre
SAUF SI il se trouve dans une balise html (entre un < et un >)
ou une balise A (entre un <a...> et un </a>)
un exemple pour mieux comprendre: je veux remplacer "toto" par "YOYO"
dans le code HTML ci dessous
source:
titi toto <a href="toto"> tutu toto </a><tag toto> toto tutu TOTO
</tag>
resultat:
titi YOYO <a href="toto"> tutu toto </a><tag toto> YOYO tutu YOYO
</tag>
Pour ce qui est des balise j'ai trouvé l'expression suivant:
preg_replace('#(toto)(?![^<]+>)#si','YOYO',$html);
Mais comment inclure dans cette expression, l'exclusion des balise <A>
?
Merci d'avoir eu le courage de m'avoir lu jusqu'ici,
Merci++ a ceux qui vont répondre.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
P'tit Marcel
Mon PB: J'ai du code HTML, je dois remplacé un mot par un autre SAUF SI il se trouve dans une balise html (entre un < et un >) ou une balise A (entre un <a...> et un </a>)
Pour ce qui est des balise j'ai trouvé l'expression suivant: preg_replace('#(toto)(?![^<]+>)#si','YOYO',$html);
je crois que cela ne fonctionnera pas si toto est en fin de balise : <blablabla toto> ==> <blablabla YOYO> ou bien s'il y a un > qui traîne tout seul : toto est > que tata ==> inchangé
J'ai un peu la flemme de chercher, mais si personne ne se dévoue j'essayerai de torcher un masque plus complet avec une assertion arrière.
Mais comment inclure dans cette expression, l'exclusion des balise <A> ?
je ne vois pas pourquoi tu veux interdire les remplacements pour le *texte* décrivant un lien (et donc pas pour le lien lui-même) ? Si tu convertit le texte de la page, pourquoi pas en particulier le texte des liens ?
eça -- P'tit Marcel stats sur les forums modérés http://www.centrale-lyon.org/ng/
Mon PB: J'ai du code HTML, je dois remplacé un mot par un autre
SAUF SI il se trouve dans une balise html (entre un < et un >)
ou une balise A (entre un <a...> et un </a>)
Pour ce qui est des balise j'ai trouvé l'expression suivant:
preg_replace('#(toto)(?![^<]+>)#si','YOYO',$html);
je crois que cela ne fonctionnera pas si toto est en fin de balise :
<blablabla toto> ==> <blablabla YOYO>
ou bien s'il y a un > qui traîne tout seul :
toto est > que tata ==> inchangé
J'ai un peu la flemme de chercher, mais si personne ne se dévoue
j'essayerai de torcher un masque plus complet avec une assertion arrière.
Mais comment inclure dans cette expression, l'exclusion des balise <A> ?
je ne vois pas pourquoi tu veux interdire les remplacements pour le
*texte* décrivant un lien (et donc pas pour le lien lui-même) ? Si tu
convertit le texte de la page, pourquoi pas en particulier le texte des
liens ?
eça
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/
Mon PB: J'ai du code HTML, je dois remplacé un mot par un autre SAUF SI il se trouve dans une balise html (entre un < et un >) ou une balise A (entre un <a...> et un </a>)
Pour ce qui est des balise j'ai trouvé l'expression suivant: preg_replace('#(toto)(?![^<]+>)#si','YOYO',$html);
je crois que cela ne fonctionnera pas si toto est en fin de balise : <blablabla toto> ==> <blablabla YOYO> ou bien s'il y a un > qui traîne tout seul : toto est > que tata ==> inchangé
J'ai un peu la flemme de chercher, mais si personne ne se dévoue j'essayerai de torcher un masque plus complet avec une assertion arrière.
Mais comment inclure dans cette expression, l'exclusion des balise <A> ?
je ne vois pas pourquoi tu veux interdire les remplacements pour le *texte* décrivant un lien (et donc pas pour le lien lui-même) ? Si tu convertit le texte de la page, pourquoi pas en particulier le texte des liens ?
eça -- P'tit Marcel stats sur les forums modérés http://www.centrale-lyon.org/ng/
Thierry
Mon PB: J'ai du code HTML, je dois remplacé un mot par un autre SAUF SI il se trouve dans une balise html (entre un < et un >) ou une balise A (entre un <a...> et un </a>)
Pour ce qui est des balise j'ai trouvé l'expression suivant: preg_replace('#(toto)(?![^<]+>)#si','YOYO',$html);
je crois que cela ne fonctionnera pas si toto est en fin de balise : <blablabla toto> ==> <blablabla YOYO> ou bien s'il y a un > qui traîne tout seul : toto est > que tata ==> inchangé
J'ai un peu la flemme de chercher, mais si personne ne se dévoue j'essayerai de torcher un masque plus complet avec une assertion arrière.
Mais comment inclure dans cette expression, l'exclusion des balise <A> ?
je ne vois pas pourquoi tu veux interdire les remplacements pour le *texte* décrivant un lien (et donc pas pour le lien lui-même) ? Si tu convertit le texte de la page, pourquoi pas en particulier le texte des liens ?
eça
La regle ci dessus ('#(toto)(?![^<]+>)#si') fonctionne parfaitement quelque soit la position de toto dans la phrase en dehors d'une balise html.
Pourquoi ne pas modifier a l'interieur des liens ? Imaginons que a la place de YOYO je veuille mettre "<a href='parici'>YOYO</a>". Dans ce cas je vais me retrouver avec un lien coupé du style: <a href='parla'> la page a <a href='parici'>YOYO</a> et par la</a>
a moins que l'on puisse recoller le lien par derriere comme: <a href='parla'> la page a </a><a href='parici'>YOYO</a><a href='parla'> et par la</a>
Si c'est possible (il parait que tout est possible avec les expressions regulieres!) je suis preneur aussi.
Merci et a+... Thierry
Mon PB: J'ai du code HTML, je dois remplacé un mot par un autre
SAUF SI il se trouve dans une balise html (entre un < et un >)
ou une balise A (entre un <a...> et un </a>)
Pour ce qui est des balise j'ai trouvé l'expression suivant:
preg_replace('#(toto)(?![^<]+>)#si','YOYO',$html);
je crois que cela ne fonctionnera pas si toto est en fin de balise :
<blablabla toto> ==> <blablabla YOYO>
ou bien s'il y a un > qui traîne tout seul :
toto est > que tata ==> inchangé
J'ai un peu la flemme de chercher, mais si personne ne se dévoue j'essayerai
de torcher un masque plus complet avec une assertion arrière.
Mais comment inclure dans cette expression, l'exclusion des balise <A> ?
je ne vois pas pourquoi tu veux interdire les remplacements pour le *texte*
décrivant un lien (et donc pas pour le lien lui-même) ? Si tu convertit le
texte de la page, pourquoi pas en particulier le texte des liens ?
eça
La regle ci dessus ('#(toto)(?![^<]+>)#si') fonctionne parfaitement
quelque soit la position de toto dans la phrase en dehors d'une balise
html.
Pourquoi ne pas modifier a l'interieur des liens ?
Imaginons que a la place de YOYO je veuille mettre "<a
href='parici'>YOYO</a>".
Dans ce cas je vais me retrouver avec un lien coupé du style:
<a href='parla'> la page a <a href='parici'>YOYO</a> et par la</a>
a moins que l'on puisse recoller le lien par derriere comme:
<a href='parla'> la page a </a><a href='parici'>YOYO</a><a
href='parla'> et par la</a>
Si c'est possible (il parait que tout est possible avec les expressions
regulieres!) je suis preneur aussi.
Mon PB: J'ai du code HTML, je dois remplacé un mot par un autre SAUF SI il se trouve dans une balise html (entre un < et un >) ou une balise A (entre un <a...> et un </a>)
Pour ce qui est des balise j'ai trouvé l'expression suivant: preg_replace('#(toto)(?![^<]+>)#si','YOYO',$html);
je crois que cela ne fonctionnera pas si toto est en fin de balise : <blablabla toto> ==> <blablabla YOYO> ou bien s'il y a un > qui traîne tout seul : toto est > que tata ==> inchangé
J'ai un peu la flemme de chercher, mais si personne ne se dévoue j'essayerai de torcher un masque plus complet avec une assertion arrière.
Mais comment inclure dans cette expression, l'exclusion des balise <A> ?
je ne vois pas pourquoi tu veux interdire les remplacements pour le *texte* décrivant un lien (et donc pas pour le lien lui-même) ? Si tu convertit le texte de la page, pourquoi pas en particulier le texte des liens ?
eça
La regle ci dessus ('#(toto)(?![^<]+>)#si') fonctionne parfaitement quelque soit la position de toto dans la phrase en dehors d'une balise html.
Pourquoi ne pas modifier a l'interieur des liens ? Imaginons que a la place de YOYO je veuille mettre "<a href='parici'>YOYO</a>". Dans ce cas je vais me retrouver avec un lien coupé du style: <a href='parla'> la page a <a href='parici'>YOYO</a> et par la</a>
a moins que l'on puisse recoller le lien par derriere comme: <a href='parla'> la page a </a><a href='parici'>YOYO</a><a href='parla'> et par la</a>
Si c'est possible (il parait que tout est possible avec les expressions regulieres!) je suis preneur aussi.
Merci et a+... Thierry
P'tit Marcel
Mon PB: J'ai du code HTML, je dois remplacé un mot par un autre SAUF SI il se trouve dans une balise html (entre un < et un >)
J'ai un peu la flemme de chercher, mais si personne ne se dévoue j'essayerai de torcher un masque plus complet avec une assertion arrière.
essaye avec ce masque : '#(?<!<[^>]*)(toto)(?![^<]*>)#siU'
(non testé, sans garantie) -- P'tit Marcel stats sur les forums modérés http://www.centrale-lyon.org/ng/
Mon PB: J'ai du code HTML, je dois remplacé un mot par un autre
SAUF SI il se trouve dans une balise html (entre un < et un >)
J'ai un peu la flemme de chercher, mais si personne ne se dévoue
j'essayerai de torcher un masque plus complet avec une assertion arrière.
essaye avec ce masque :
'#(?<!<[^>]*)(toto)(?![^<]*>)#siU'
(non testé, sans garantie)
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/