Michael: RegEX

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

  1. Moin Moin!

    Nimm einen HTML-Parser.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  2. 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

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
  3. 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

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Also du möchtest aus
      <!--x-->Y<!--x-->
      <!--x--><!--x-->
      machen?

      Hey Beat,

      nein, ich möchte den Text zwischen den Kommentaren matchen.

      Danke.

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

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