Stefan Muenz: Aufsplitten und verfrachten in Array

Beitrag lesen

Hallo Sam,

Ich habe in meinem CGI-Skript(Perl) eine Variable $_ , die HTML-Code enthält (z.B. "<HTML><HEAD><TITLE>Hallo</TITLE> ...").
Ich möchte den HTML-Code jetzt in einen Array verfrachten, so dass das ganze danach folgendermaßen aussieht:
my @Tags = ("<HTML>","<HEAD>","<TITLE>","Hallo","</TITLE>");
Wie geh' ich dazu vor? Mach ich das mit dem Split-Befehl?

Bei split() brauchst du halt immer einen eindeutigen Separator, also ein Zeichen oder eine Zeichenfolge, die zwischen allen zu trennenden Elementen gleich ist. Das ist in dem Beispiel so weit ich sehen kann jedoch nicht der Fall.

Wenn es eine in Teilen bekannte Zeichenkette ist, kannst du es mit regulaeren Ausdruecken und Klammerung gemerkter Teile versuchen, also etwa so:

$_ ~= /(<HTML>)(<HEAD>)(<TITLE>)(.*)(</TITLE>)/;

Anschliessend hast du in den RegExpr-Variablen $1 bis $5 die Teilelemente stehen, und mit
push(@Tags,$1,$2,$3,$4,$5);
koenntest du die Teile in einen Array bekommen.

Wenn du allerdings eine ganze, komplexe HTML-Datei auf diese Weise auseinandernehmen willst, funktioniert das kaum mehr. Dazu brauchst du einen richtigen "Parser", also ein Software-Modul, das den gesamten Strukturbaum der HTML-Datei systematisch auseinander nimmt. Dafuer gibt es in Perl vermutlich Module zum Einbinden (eigene Frage: gibt es das eigentlich - ein HTML-Parsing-Modul, also nicht das XML-Parsing-Modul?). Dann musst du dich allerdings mit der Verwendung des entsprechenden Moduls auseinandersetzen.

viele Gruesse
  Stefan Muenz