[REGEX] String wird verschachtelt ersetzt

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [REGEX] String wird verschachtelt ersetzt

    hi ho...
    hab dies in einem string hier:

    Code:
    <table border=1>
    <SECTION:index><tr><td>irgendwas</td></tr></SECTION>
    <tr><td>schönes wetter draussen</td></tr>
    <SECTION:end><tr><td>etwas anderes mal wieder</td></tr></SECTION>
    </table>
    nun möchte ich, dass er alles findet was zwischen <SECTION></SECTION> steht und mir zusätzlich den parameter in <SECTIONarameter> ausliest. meine regex sieht jetzt so aus:

    Code:
    /<SECTION:([^>]*)>(.+)<\/SECTION>/si
    nun wenn in dem string <SECTION:irgendwas>...</SECTION> 1x mal vorkommt, dann macht er alles korrekt und findet \1 und auch \2 und kann sie mir richtig auslesen. sobald aber in dem string diese <SECTION:dings> öfters vorkommt (wie in meinem bsp. oben) dann ist \2 komischerweise das hier:

    Code:
    <tr><td>irgendwas</td></tr></SECTION>
    <tr><td>schönes wetter draussen</td></tr>
    <SECTION:end><tr><td>etwas anderes mal wieder</td></tr>
    also quasi "verschachtelt" (weiss nicht ob der begriff hier passt )... hat einer eine idee was ich an der regex ändern muss? in eine schleife packen würde ja für verschachtelungen sein, aber die sind nicht verschachteln sondern kommen halt an verschiedenen stellen öfters vor.

    danke für eure hilfe im voraus!

  • #2
    standard-einstellung bei pcre ist die unermäßliche gier. dein regexp schnappt sich immer soviel zeichen, wie er nur kriegen kann. daher war dein ergebnis zu erwarten.

    der modifer U unterbindet diese gier (greediness) - der regexp wird ungreedy ... aber bitte groß schreiben, ein kleines u bedeutet wieder etwas anderes ...
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      danke! es hat wunderbar funktioniert. hab allerdings noch eine kleine frage... ich will, dass dieser string:

      Code:
      <FILE:dir/file />
      das "dir/file" ausliest... meine expression sieht jetzt so aus:

      Code:
      /<FILE:([^\/>]*) \/>/eiU
      allerdings ergibt das keinen match :/ hat da jemand noch vielleicht einen kleinen tip? danke

      Kommentar


      • #4
        Code:
        [^\/>]
        verbietet nicht /> sondern / und >
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Code:
          /<FILE:([^\/][^>]*) \/>/eiU
          hab das so probiert, aber er matcht immer noch nicht. und das "/" kann ich nicht verbieten, denn es soll auch gehen "<FILErdner/datei />"

          Kommentar

          Lädt...
          X