Thread ganzer bereich aus html parsen
(6 answers)
Opened by ptk at 2004-01-20 13:54
Ok, die RE war noch nicht ganz richtig... hier die getestete richtige Variante:
Code: (dl
)
1 m~<span[^>]*id="Historybar1_lbHistBar"[^>]*> Getestet in folgendem Code (Wobei die auseinandergezogenen Doppelunterstriche wieder zusammenzuziehen sind (ist ein Boardfehler)): Code: (dl
)
1 #!/usr/bin/perl Mit der Ausgabe Code: (dl
)
1 Treffer: Erklärung zur RE: Schauen wir uns den Audruck einmal an. <span[^>]*id="Historybar1_lbHistBar"[^>]*> Er fängt mit dem eindeutig gekennzeichneten span an, so wie es in Deinem Beispiel aussah war diese id die eindeutige Kennung. Das was nun folgt wird in einer Klammer gefangen, damit es hinterher in der Variablen $1 steht. Was darf nun hier folgen? Ein bis beliebig viele Dinge, die folgendermaßen beschaffen sein dürfen: 1) <span[^>]*>(?:(?!</span>).)+</span> komplette in span-Tags eingeschlossene Ausdrücke (denn diese darf man ja schachteln). oder 2) (?!</span>). Zeichen, die nicht der Anfang von "</span>" sind Der Ausdruck wird aufhören, wenn er an das </span> des ursprünglichen (besonderen) span-Tags stößt, da das erste Zeichen davon ("<") weder auf die erste noch auf die zweite erlaubte Kategorie passt. Edit: Mal wieder Smilies ausgeschaltet :-[ Edit2: Grenzen: Kommen in Deinem span wiederum ineinander verschachtelte spans vor, wird ein falsches Ergebnis zurückgeliefert. Deshalb ist es - wie so oft - besser, einen echten Parser zu verwenden, der mit solchen Sachen klarkommt. Man könnte jetzt die RE noch auf eine Schachtelstufe weiter aufwulsten, aber das löst das Problem nicht. Deshalb kann soetwas immer nur eine Notlösung sein.\n\n <!--EDIT|Crian|1074677558--> s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite |