Regulärer Ausdruck über mehrere Zeilen
Thomas
- perl
Hallo Zusammen, ich habe ein Problem mit den reg. Ausdrücken.
Ausgang ist eine XML-Datei, die mehere Zeilen hat.
Bsp: test.xml
<Komponente id="1234">
Text....
Text....
</Komponente>
<Komponente id="5678">
Text....
Text....
</Komponente>
Nun möchte ich die Textsegmente anhand der Id filtern.
In dem Fall soll
<Komponente id="1234">
Text....
Text....
</Komponente>
in ein Array geschrieben werden.
Hier meine Lösung:
In $zeile habe ich die XML Datei geschrieben.
open(WR, "<test.xml") || die "Datei wurde nicht gefunden\n";
$zeile = join('', <WR>);
@array1 = $zeile =~ /<Komponente id="1234".*</Komponente>/mg ;
Der "." sollte eigtl neue Zeilen mit einschließen und das "/m" über mehrere Zeilen suchen.
Leider funktioniert die Lösung nicht.
Hat jemand einen Vorschlag?
=~ m/../gs
=~ m/../gs
vielen Dank für deine schnelle Antwort.
Jetzt habe ich noch das Problem, das der reg. Ausdruck bis zum letzten </Komponente> sucht und nicht nach der ersten abbricht.
/<Komponente id="1234".*?</Komponente>/
:-) google mal nach Seiten die den Umgang mit Regulären Ausdrücken beschreiben. Es gibt ne Menge guter Seiten!
Gruß, Markus
Hi,
Jetzt habe ich noch das Problem, das der reg. Ausdruck bis zum letzten </Komponente> sucht und nicht nach der ersten abbricht.
weil * gierig ist.
Du willst aber nicht-gierig suchen.
cu,
Andreas
hi,
Hat jemand einen Vorschlag?
/s
Hotti
Hallo Zusammen, ich habe ein Problem mit den reg. Ausdrücken.
Ausgang ist eine XML-Datei, die mehere Zeilen hat.
Hat jemand einen Vorschlag?
Frage: gibts in Perl keine vernünftigere Möglichkeit, XML-Dokumente zu parsen? Abfragesprachen wie etwa XPath böten sich hier doch sicher an.
Frage: gibts in Perl keine vernünftigere Möglichkeit, XML-Dokumente zu parsen? Abfragesprachen wie etwa XPath böten sich hier doch sicher an.
Sicher, da ist bestimmt etwas dabei http://search.cpan.org/search?query=xml+parser&mode=all
Struppi.
XML::Twig hat Unterstützung für XPath und auch supertolle Kommandozeilenwerkzeuge.
> xml_grep 'Komponente[@id="1234"]' foo.xml
@array1 = $zeile =~ /<Komponente id="1234".*</Komponente>/mg ;
Der "." sollte eigtl neue Zeilen mit einschließen und das "/m" über mehrere Zeilen suchen.
Hint
/m steuert das Verhalten von ^ und $, nämlich \n sind Anker für ^ und $
/s steuert das verhalten von . nämlich, ist \n auch Teil von .
mfg Beat