Rolf b: Mit Regex zu jedem Match das übergeordnete Element finden

Beitrag lesen

Also ich habe in meinem Leben schon viele HTML Seiten mit Reg-Echsen duchwuselt und grundsätzlich geht das schon. Dass "HTML nicht regulär" ist, spielt dabei keine Rolle, schließlich willst Du keinen endlichen Automaten aus dem HTML machen, sondern "nur" Überschriften darin finden.

Beispielsweise liefert Dir diese RegEx

   /<h([123456]).*?>(.*?)<\/h\1>/s

der Reihe nach alle Überschriften-Sequenzen, bis auf einige Sonderfälle wie eine spitze rechte Klammer innerhalb von Anführungszeichen in Attributwerten oder Trümmer wie

   <h1>Das ist <h1>eine Überschrift</h1> zum Erbrechen</h1>

Ein Browser mag darin einen Rest-Sinn finden, aber die RegEx nicht :)

Je Match hast Du zwei groups im Capture, die erste ist die Überschriftenstufe, die zweite ist der Überschriftentext.

Den Rückbezug von einer untergeordneten Überschrift zur darüberliegenden Stufe wirst Du aber außerhalb der RegEx herstellen müssen, da sehe ich mit RegEx Mitteln keine Chance.