RegEX
Michael
- perl
0 Alexander (HH)0 Hopsel0 Beat
Guten Morgen liebes Forum!
Ich könnte bei folgender Fragestellung eure Hilfe gebrauchen.
Ich habe eine Datei im HTML Format. Nun möchte Text, der zwischen zwei bestimmten Kommentaren steht, herausfiltern.
Bsp.:
<!-- TEST -->
<table>
<tr><td>Das ist ganz toll</td></tr></table>
<!-- TEST -->
Mein Versuch:
/<!--.?TEST.?-->([^(<!--)]+?)<!--.?TEST.?-->/is
Das klappt aber leider nicht.
Vielen Dank schon mal.
Gruß
Michael
Moin Moin!
Nimm einen HTML-Parser.
Alexander
Hi Michael!
Mein Versuch:
/<!--.?TEST.?-->([^(<!--)]+?)<!--.?TEST.?-->/is
Das klappt aber leider nicht.
Das ist keine Fehlerbeschreibung.
Den HTML-Kommentar würde ich mit "<!--\s+TEST\s+-->" matchen.
Alles was dazwischen kommt wäre dann ".*".
Jetzt muss du nur dafür sorgen, dass der Ausdrück nicht zu gierig ist (Modifikator U) und den Zeilenumbruch als Zeichen akeptiert (s).
MfG H☼psel
Ich habe eine Datei im HTML Format. Nun möchte Text, der zwischen zwei bestimmten Kommentaren steht, herausfiltern.
Also du möchtest aus
<!--x-->Y<!--x-->
<!--x--><!--x-->
machen?
s/(<!--.+?-->)(.*?)\1/$1$1/sg
$1 $2 $1
Ich verwende \1 als Backreferenz auf $1 für die linke Seite.
Falls deine Kommentar-Paare aber asymmetrisch sind:
s/(<!--\s*(.+?)\s*-->)(.*?)(<!--\s*(\2)\s*-->)/$1$4/sg
$1 $2 $3 $4 $5
mfg Beat
Also du möchtest aus
<!--x-->Y<!--x-->
<!--x--><!--x-->
machen?
Hey Beat,
nein, ich möchte den Text zwischen den Kommentaren matchen.
Danke.
nein, ich möchte den Text zwischen den Kommentaren matchen.
ach so
symmetrische Kommentare
/(<!--.+?-->)(.*?)\1/s
and do_something($2);
asymmetrische Kommentare:
/(?:<!--\s*(.+?)\s*-->)(.*?)(?:<!--\s*\1\s*-->)/s
and do_something($2);
mfg Beat