Hilfe zu StringRegExp --> HTML-Tags und Attribute auslesen

  • Hallo erstmal,
    Ich versuche gerade ein Skript zu schreiben, das alle select tags ausließt. Es soll in der Lage sein folgendes aus einer HTML-Datei in ein Array extrahieren können:

    [etwas HTML]<select [evtl. Attribute]>[beliebige Anzahl an options]</select>[noch mher HTML]

    Natürlich sind HTML-Tags unabhängig von Groß- und Kleinschreibung.
    Im 2. Schritt will ich dann den Namen der selects extrahieren, also folgendes:

    <select [Attribute] name="namedesselects" [weitere Attribute]>

    Ich hab das Ganze mit StringRegExp probiert, aber das Klappt nur bedingt, da ich aus der Referenz nich sehr schlau werde.
    Ich danke schon im Vorraus für die Hilfe!

    MfG BigMars

    2 Mal editiert, zuletzt von BigMars (11. Juli 2008 um 16:18)

  • So, da keiner einen Vorschlag hat, poste ich mal meine mittlerweile selbst erarbeitete Lösung rein.
    Vielleicht kann sie jemanden mal behilflich sein.

    [autoit]

    StringRegExp($html, "(?s)(?i)<select.*? name=(.*?)[ >].*?</select>", 4)

    [/autoit]

    Erklärung:

    $html ist der HTML-Code, der untersucht werden soll.

    (?s) : bewirkt, dass der Punkt alles erfasst
    (?i) : bewirkt, dass die Groß- und Kleinschreibung vernachlässigt wird
    .*? : dadurch erkennt der Automat mehrere (oder auch keine) beliebige Zeichen
    (.*?) : ist wie .*?, aber die Klammern bewirken, dass diese Zeichen gespeichert werden und anschließend im Array zurückgegeben werden
    [ >] : erkennt entweder ein Leerzeichen, oder ein ">"
    Der Rest wird so erkannt wie er dageschrieben steht, z.B. </select> steht für "</select>"

    Die Option 4 gibt alle Treffer in einem Array zurück. Die Treffer selbst sind wieder Arrays mit 2 Elementen.
    Das erste Element enthält den Kompletten Treffer, also <select ... name="..." ...>...</select>
    Das zweite Element gibt das zurück, was in runden Klammern zusammengefasst wurde, in diesem Fall (.*?), was den Namen des selects entspricht

    Hoffe es kann irgendwann mal jemanden helfen.

    Danke für die große Hilfe ;)
    BigMars