Regulärer Ausdruck über mehrere Zeilen



  • Hallo,

    ich würde mir gerne mit einem Regulären Ausdruck HTML-Knoten aus einer HTML-Seite rausfiltern. Für das <a>-Tag sieht mein Regulärer Ausdruck wie folgt aus:

    <a>.+</a>
    

    Aber er matched nur wenn sich der HTML-Knoten nicht über mehrere Zeilen zieht. Wie kann ich den Ausdruck so umstellen das er auch dann matched?



  • Hi

    a. was verwendest du um dei regulären ausdrücke auf eine datei loszulassen?

    prolbem wir sein, das der Zeilenumbruch nicht als zulässiges Alphabetszeichen für .+ definiert ist.

    gruss Termite



  • Ich hole mir die Seite direkt über Http aus dem Internet und les mir den Inhalt als String aus dem Stream meines HttpWebResponse-Objekt aus. (benutze .NET)

    Kann mann denn in regulären Ausfdrücken keinen Zeilenumbruch darstellen?

    <a>(.|\n)+</a>
    

    ...funktioniert nicht.



  • Aus Perl kenne ich das so, dass man nen Flag mitangibt welches über Zeilenenden hinweg sucht.

    Schau mal in der Doku dazu da gibt es bestimmt so ein Flag.



  • Ich kenn den Flag, /s lautet der, aber das funktioniert auch nicht. Slashes werden bei regulären Ausdrücken in .NET ja auch wie normale Buchstaben behandelt. Ich kann aber bevor ich den regulären Ausdruck matchen lass einfach mit der Replace()-Methode die Zeilenumbrüche rauslöschen und das werde ich jetzt auch so machen, wobei ich es doch schon lieber direkt im regulären Ausdruck gelöst hätte





  • Diese Seite kenn ich schon. Das Problem ist das ich bei regulären Ausdrücken in .net keine Schalter in form von "/s" benutzen kann, aber ich hab rausgefunden das es für jeden Schalter eine Konstante im RegexOptions-Enumerator gibt den man dem Konstruktor der Regex Klasse übergeben kann.

    System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex("<a>(.)+</a>", System.Text.RegularExpressions.RegexOptions.Singleline);
    

Anmelden zum Antworten