[REGEX] Alle HTML-Tags in Arrays setzen

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

  • [REGEX] Alle HTML-Tags in Arrays setzen

    Fuer alle HTML-Tags in einer Datei soll ein Array erzeugt werden.

    Der Array soll wie folgt aufgebaut sein:

    Array (
    [0] => Array ( ['tag'] => 'head', ['closing'] => false, ['attributes'] => Array ( ) )
    [1] => Array ( ['tag'] => 'head', ['closing'] => true, ['attributes'] => Array ( ) )
    [2] => Array ( ['tag'] => 'body', ['closing'] => false, ['attributes'] => Array ( ['bgcolor'] => 'red' ) ) )

    Es soll also jeder Tag in einem Array-Element gespeichert werden. Jedes Array-Element hat dann untergeordnete Arrays, der aus 'tag', 'closing' und 'attributes' besteht.

    In diesen Elementen kommen folgende Werte:
    tag: Name des Tags
    closing: false, falls es ein oeffnender Tag ist (z.B. <p>); true, fall es ein schliessender Tag ist (z.B. </p>)
    attributes: Alle Attribute, die dem Tag zugehoeren. Hier ist ein Beispiel der Attribute:

    <select name="wahl" id="4" selected>

    Der Array fuer die Attribute wuerde dann so ausschauen:
    'name' = 'wahl'
    'id' = '4'
    'selected' = ''

    Als Attribute sind folgende Sachen moeglich:
    name="double quoted value"
    name='single quoted value'
    name=NotQuotedValueWithNoWhitespace
    name

    Wie kann man alle Tags wie beschrieben in einem Array speichern? Ich habe ein bisschen mit PHP herumprobiert, habe aber keine Loesung gefunden. Mir fehlt es sowohl an Erfahrung an PHP-Funktionen als auch an REGEX-Erfahrung. Ich habe es mit preg_match_all probiert und auch gegooglet. Nach ueber 5 Stunden habe ich nicht das Geringste zusammengebracht.

  • #2
    DOM / XMLReader anschauen.
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      Mein Regulaerer Ausdruck schaut nun so aus:

      <([a-z][a-z0-9]*)\s*((\w+\s*(=\s*('[^']*'|"[^"]*|[^>\s]*")\s*)?)*)>

      Fuer die einzelnen verschiedenen Arten des Attributes schaut es so aus:

      <([a-z][a-z0-9]*)\s*((\w+\s*=\s*'[^']*'\s*)*)>
      <([a-z][a-z0-9]*)\s*((\w+\s*=\s*"[^"]*"\s*)*)>
      <([a-z][a-z0-9]*)\s*((\w+\s*=\s*[^>\s]*\s*)*)>
      <([a-z][a-z0-9]*)\s*((\w+\s*)*)>

      Ich weiss aber nicht, ob der ueberhaupt etwas taugt. Ich weiss auch nicht, wie ich ihn am besten in PHP einbaue. Koennt ihr mir da Tipps geben, welche Funktionen ich da verwenden muss und wie ich das Ergebnis verarbeite?

      Falls ich alles richtig gemacht habe, kann man ja den Tagnamen als $1 und alle Attribute als $2 auslesen?
      Zuletzt geändert von PHP-Master07; 06.01.2008, 20:46.

      Kommentar


      • #4
        Höre auf den Tontechniker!

        Mit einfachen Regexen kommst du nicht weit. Du brauchst einen Parser.
        http://de3.php.net/manual/de/ref.dom.php ist dazu sehr gut geeignet.
        Wir werden alle sterben

        Kommentar

        Lädt...
        X