Philipp Hasenfratz: RegExp: Verschachtelungen nur bis zur Ebene 1 ausgeben

Halihallo Forumer

hab wiedereinmal ein kleines RegularExpression Problem... Bin leider (anscheinend) nicht mächtig, dieses selber zu lösen:

Beispiel:
<ul>
   <li>test1.1</li>
   <li>test1.2</li>
   <li>
      <ul>
         <li>test2.1</li>
      </ul>
   </li>
   <li>test1.3</li>
</ul>

Gibt es einen ansatz mit RegExp, um nur die Ebene 1 auszulesen (also test1.1, test1.2, test1.3, nicht aber test2.1)? - Also, jedes li auslassen, welches einen Unterknoten enthält (natürlich nicht in reinem Regexp, es sind auch Funktionsaufrufe erlaubt)...
Ich sehe weder einen linearen, noch einen rekursiven Ansatz, aber ich hoffe auf euren Geist (meiner wird langsam etwas müüüüdeeehhh *gähn*) ;)

Viele Grüsse

Philipp

  1. Hi,

    hab wiedereinmal ein kleines RegularExpression Problem...

    dieses Problem ist im Verständnis des Einsatzgebietes begründet. Regular Expressions eignen sich _nicht_, um komplexe Strukturen zu analysieren. Du möchtest HTML::Parser, HTML::TokeParser oder ein vergleichbares Modul verwenden.

    Cheatah

    1. Hi Cheatah

      hab wiedereinmal ein kleines RegularExpression Problem...

      dieses Problem ist im Verständnis des Einsatzgebietes begründet. Regular Expressions eignen sich _nicht_, um komplexe Strukturen zu analysieren.

      Du möchtest HTML::Parser, HTML::TokeParser oder ein vergleichbares Modul verwenden.

      so, möcht ich das!? - Nun gut ;-)
      Wenn's dann sein muss, greif ich eben auf die zurück... Nur schade...

      Viele Grüsse

      Philipp

  2. Hi

    Das einzige was mir jetzt einfällt, ist, das du  neben untergeordneten <li>`s einen Kommentar schreibst.

    mfg

    Andres Freund

    1. Halihallo

      Das einzige was mir jetzt einfällt, ist, das du  neben untergeordneten <li>`s einen Kommentar schreibst.

      Eigentlich hab ich gar keinen Einfluss auf das HTML, denn ich erstelle es nicht. Aber deine Lösung ist trotzdem analalog verwertbar:
      alle <ul> und </ul> (nicht der "Top-level") mit Kommentaren ersetzen bzw. erweitern (einfaches Regexp-Replace); dann alles Verarbeiten, jedoch Kommentare ignorieren... Yo, das dürfte so funktionieren.
      So liesse sich dann sogar eine Rekursion programmieren, welche die Aufzählungen trotzdem richtig in einen HTML-Baum aufsplittet (ja ich kenne die HTML::Parser, HTML::TreeBuilder u. ä.).

      Danke für die Idee

      Viele Grüsse

      Philipp