zeile löschen bzw. ersetzen
sf
- perl
hi
ich möchte den inhalt aus einer html-datei zeilenweise einlesen und dabei bestimmte zeilen ersetzen.
das geht eigentlich problemlos, aber wie macht man das wenn man nicht genau weiß was in der zeile die man ersetzen möchte steht?
mein code sieht im moment so aus:
foreach $html_line (@repost)
{
if ($html_line =~ /<input type=hidden name="myname" value="ich bins">/)
{
print REPOST " <input type=hidden name="myname" value="nicht">\n";
}
else
{
print REPOST "$html_line";
}
im prinzip möchte ich also die html datei öffnen und den wert von value immer überschreiben(was mit dem obigem code nicht geht, da ich den wert von value nicht kenne).
danke schonmal im vorraus
sf
hi!
ich möchte den inhalt aus einer html-datei zeilenweise einlesen und dabei bestimmte zeilen ersetzen.
das geht eigentlich problemlos, aber wie macht man das wenn man nicht genau weiß was in der zeile
die man ersetzen möchte steht?
Beschäftige dich mit Regulären Ausdrücken: perldoc perlre
»» if ($html_line =~ /<input type=hidden name="myname" value="ich bins">/)
if ($html_line =~ /<input type=hidden name="myname" value="(.*?)">/)
[...]
(.*?) erkennt alle Zeichen bis zum _nächsten_ Vorkommen des nachfolgenden Zeichen. Ohne ? würde es
alle Zeichen bis zum _letzten_ Vorkommen erkennen. Der Inhalt wird wegen der () in $1 geschrieben,
falls du das nicht brauchst, lässt du die Klammern weg.
Ich weiß auch nicht genau, was in deiner HTML-Zeile steht. Vergewissere dich, dass du "-Zeichen wirklich
maskieren möchtest :)
bye, Frank!
Hi,
Beschäftige dich mit Regulären Ausdrücken: perldoc perlre
das kann ich nur unterstützen.
if ($html_line =~ /<input type=hidden name="myname" value="(.*?)">/)
Wenn Du den value abhängig vom name ändern möchtest, empfiehlt es sich, erst einen Hash %values aufzubauen, und dann direkt zu ersetzen:
$html_line =~ s/(<input type=hidden name=")(.*?)(" value=")(.*?)(">)/$1.$2.$3.$values{$2}.$5/gesi;
(ungetestet)
Alternativ sollte das Modul HTML::Parse oder HTML::Parser (ich habe beide noch nicht benutzt) helfen.
Vergewissere dich, dass du "-Zeichen wirklich maskieren möchtest :)
Ich glaube, das möchte er nicht, deswegen habe ich es auch gleich mal gelassen :-)
Cheatah