OVH Cloud OVH Cloud

remplacement dans du HTML

8 réponses
Avatar
paul
bonjour,

je veux faire des remplacement par exp reg dans du html.
Quelque chose du genre :
remplacer "TOTO" par "TITI" dans <html><body>toto</body></html>
Ca, c'est simple.
Mais je ne VEUX PAS remplacer une chaine de caractères dans les balises
HTML, seulement dans le texte.
Par exemple, dans :
<html><body class="toto">toto</body></html>
je ne veux pas remplacer le toto qui est dans class="toto".

Donc, comment que je puis-je faire ca ?

Sur ce, bonne année, et comme le dit RMS : Happy Hacking :-)
--
Paul

8 réponses

Avatar
Samuel Mouniée
paul wrote:
bonjour,

je veux faire des remplacement par exp reg dans du html.
Quelque chose du genre :
remplacer "TOTO" par "TITI" dans <html><body>toto</body></html>
Ca, c'est simple.
Mais je ne VEUX PAS remplacer une chaine de caractères dans les balises
HTML, seulement dans le texte.
Par exemple, dans :
<html><body class="toto">toto</body></html>
je ne veux pas remplacer le toto qui est dans class="toto".

Donc, comment que je puis-je faire ca ?

Sur ce, bonne année, et comme le dit RMS : Happy Hacking :-)



Bonjour,

la solution la plus propre serait d'utiliser HTML::Parser pour traiter
votre fichier HTML.

avec cette solution, vous reinventer plein de choses dont HTML::Parser .
je vous invite donc a utiliser HTML::Parser .

.s'nuoM

Avatar
Samuel Mouniée
Bonjour,

Samuel Mouniée wrote:
paul wrote:
bonjour,

je veux faire des remplacement par exp reg dans du html.
Quelque chose du genre :
remplacer "TOTO" par "TITI" dans <html><body>toto</body></html>
Ca, c'est simple.
Mais je ne VEUX PAS remplacer une chaine de caractères dans les balises
HTML, seulement dans le texte.
Par exemple, dans :
<html><body class="toto">toto</body></html>
je ne veux pas remplacer le toto qui est dans class="toto".

Donc, comment que je puis-je faire ca ?

Sur ce, bonne année, et comme le dit RMS : Happy Hacking :-)



Bonjour,

la solution la plus propre serait d'utiliser HTML::Parser pour traiter
votre fichier HTML.

avec cette solution, vous reinventer plein de choses dont HTML::Parser .
je vous invite donc a utiliser HTML::Parser .


ca m'apprendra a me relire trop rapidement. j'avais pondu un pseudo code
pour parser un fichier HTML conformement a la norme. mais je l'ai retiré
car il pouvait se mettre a deconner sur les fichiers HTML "crade" ( avec
&<> à la place de &amp; &gt; &lt; ).

.s'nuoM


Avatar
paul
Samuel Mouniée wrote:
la solution la plus propre serait d'utiliser HTML::Parser pour traiter
votre fichier HTML.

avec cette solution, vous reinventer plein de choses dont HTML::Parser .
je vous invite donc a utiliser HTML::Parser .


J'utilise déjà HTML::Parser pour une première phase d'analyse. Mais lorsque
j'utilise l'arbre pour les remplacements, puis que je regénère le fichier
HTML, il est "illisible" (plus indenté...)

Ou alors, j'ai raté un truc ?
--
Paul

Avatar
Samuel Mouniée
Bonjour,

paul wrote:
Samuel Mouniée wrote:

la solution la plus propre serait d'utiliser HTML::Parser pour traiter
votre fichier HTML.

avec cette solution, vous reinventer plein de choses dont HTML::Parser .
je vous invite donc a utiliser HTML::Parser .



J'utilise déjà HTML::Parser pour une première phase d'analyse. Mais lorsque
j'utilise l'arbre pour les remplacements, puis que je regénère le fichier
HTML, il est "illisible" (plus indenté...)

Ou alors, j'ai raté un truc ?


$html->as_HTML( undef, " ", undef );

ca devrait marcher d'apres la doc.

.s'nuoM


Avatar
dominix
paul wrote:
bonjour,

je veux faire des remplacement par exp reg dans du html.
Quelque chose du genre :
remplacer "TOTO" par "TITI" dans <html><body>toto</body></html>
Ca, c'est simple.
Mais je ne VEUX PAS remplacer une chaine de caractères dans les
balises HTML, seulement dans le texte.
Par exemple, dans :
<html><body class="toto">toto</body></html>
je ne veux pas remplacer le toto qui est dans class="toto".

Donc, comment que je puis-je faire ca ?



#!/usr/bin/perl -w
use strict;
use HTML::TokeParser::Simple;
my $p = HTML::TokeParser::Simple->new( *DATA );

while ( my $token = $p->get_token ) {
$_ = $token->as_is;
s/toto/tagada/g if $token->is_text;
print
}
__DATA__
<html><body class="toto">toto</body></html>

--
dominix
s&&rsexinimodreve&&&s&x.+d&"$'$`$"$&"&ee&&y&srve&&d&&print

Avatar
Jean-Michel Hiver
paul wrote:
bonjour,

je veux faire des remplacement par exp reg dans du html.
Quelque chose du genre :
remplacer "TOTO" par "TITI" dans <html><body>toto</body></html>
Ca, c'est simple.
Mais je ne VEUX PAS remplacer une chaine de caractères dans les balises
HTML, seulement dans le texte.
Par exemple, dans :
<html><body class="toto">toto</body></html>
je ne veux pas remplacer le toto qui est dans class="toto".


HTML::TreeBuilder te permet de transformer le HTML en une structure
arborescente. Il permet aussi de faire l'operation inverse.

A toi de:

1/ Utiliser HTML::TreeBuilder pour transformer le HTML en arbre.

2/ Ecrire une fonction recursive pour explorer l'arbre et faire ta
substitution.

3/ Utiliser HTML::TreeBuilder encore pour transforme l'arbre (modifie)
en HTML.

Avatar
paul
Samuel Mouniée wrote:

Ou alors, j'ai raté un truc ?


$html->as_HTML( undef, " ", undef );

ca devrait marcher d'apres la doc.


Can't locate auto/HTML/Parser/as_HTML.al in @INC (@INC contains:
/usr/lib/perl5/5.8.1/i386-linux-thread-multi /usr/lib/perl5/5.8.1
/usr/lib/perl5/site_perl/5.8.1/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.1 /usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.1/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.1 /usr/lib/perl5/vendor_perl/5.8.0
/usr/lib/perl5/vendor_perl .) at ./tmpl_process.pl line 131

Je sens qu'il me manque un truc là..
--
Paul


Avatar
Patrick
HTML::TreeBuilder te permet de transformer le HTML en une structure
arborescente. Il permet aussi de faire l'operation inverse.


HTML::Seamstress en est une sous-class et automatise pas mal de choses.

Patrick.