Matti Maekitalo: Regulärer Ausdruck um HTML zu filtern

Beitrag lesen

use Mosche;

Mittels dem Modul LWP::Simple lese ich den Inhalt einer Website (ich möchte letztendlich eine Fussballtabelle aus einer Website herausfilten), jedoch bekomme ich nicht den Inhalt des Bodys herausgelesen, also alles was zwischen <body ...> und </body> steht. Das Problem hierbei ist, dass in dem einleitenden Body-Tag viele Atribute stehe. Ich nutze den regulären Ausdruck .* dafür, aber es wird nichts zurückgeliefert?!

$html =~ m/<body.*>(.*)</body>/si;  # Hier ist der Fehler versteckt

Ich gebe dir mal folgenden Quelltext:

<body bgcolor="#456756"><h1>blah</h1></body>

<body .*> macht jetzt auf "<body bgcolor="#456756"><h1>blah</h1>". Es würde hier also reichen, deinen Ausdruck zu so etwas umzuwandeln:
/<body[^>]*>(.*)</body>/
Problem könnte auftreten, wenn in einem Parameter ein '>' auftritt.

Insgesamt ist es annähernd unmöglich, mit Regulären Ausdrücken HTML zu parsen. Nimm dafür einen dedizierten Parser wie HTML::Parser, erhältlich bei CPAN.

use Tschoe qw(Matti);

--
neues Selftreffen?
http://selfcommunity.teamone.de/foren/community/?t=2241&m=2687
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.