Thomas: Regulärer Ausdruck über mehrere Zeilen

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?

  1. =~ m/../gs

    1. =~ 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.

      1. /<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

      2. 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

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  2. hi,

    Hat jemand einen Vorschlag?

    /s

    Hotti

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  3. 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.

    1. 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.

    2. XML::Twig hat Unterstützung für XPath und auch supertolle Kommandozeilenwerkzeuge.

        
      
      > xml_grep 'Komponente[@id="1234"]' foo.xml  
      
      
  4. @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

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische