Vinzenz: Überschriften per PHP finden

Beitrag lesen

Hallo RW

  1. <H2 ALIGN="CENTER"><A NAME="exkurs"></A>Text zum Filtern</H2>
            ^^^
    Hier folgt auf H2 ein Leerzeichen
    Das ist nur ein Beispiel es könnte jede andere *.htm sein

Nein, es get um Deinen Filter.

Was muss ich machen um auch die zweite Überschrift auslesen zu können ?
$filter ="<h2>(.*)</h2>";
               ^^^

Du suchst hier explizit nach etwas, was mit <h2> anfängt,
<h2 align=...> fängt _nicht_ mit <h2> an

Zudem solltest Du auf Groß- und Kleinschreibung achten.

Das verstehe ich nicht!!

if(eregi($filter, $linie, $title))
erigi = Groß bzw. Klein ist egal oder so?

Da hast Du recht, hab' ich übersehen :-(

Wie kann ich den /$filter/ umschreiben das er alles zwischen <h2.....> entfernt ?

1. Nun ja, du suchst zuallererst mal _alle_ Übereinstimmungen.
2. Wenn Du die gefunden hast, dann darfst Du die Tags entfernen.

Zu 1.
Meine PHP-Doku (Programming PHP von Rasmus Lerdorf & Kevin Tatroe) besagt, dass die POSIX-regexps gierige Quantifier haben, d.h. der * in <h2>(.*)</h2> sorgt dafür, dass Du exakt das erste <h2> und das letzte </h2> im Text bekommst. Das ist sicher nicht was Du willst.

Ich habe es mit den Perl-kompatiblen regulären Ausdrücken hinbekommen:

Filter: '/(<h2(.*?)</h2>/i'
Anmerkungen: Du darfst nur nach dem Tag-Anfang suchen, d.h, nach <h2
In (.*?) bedeutet das ?, dass das erste Auftreten von </h2> nach <h2 gesucht wird, minimal gieriges Verhalten, und den / in </h2> brauchst Du, um den Backslash zu maskieren.
Das Muster wird in / / eingepackt, das angehängte i bedeutet case-insensitive.

Die Funktion, die Du anwenden solltest, ist
preg_match_all(Muster, Text, Vorkommen, [Reihenfolge])
http://www.php.net/manual/en/function.preg-match-all.php
Diese findet alle Vorkommen, die in ein Array geschrieben werden.

Zu 2.
Auf die Elemente dieses Arrays solltest Du dann strip_tags() anwenden:
http://www.php.net/manual/en/function.strip-tags.php
Natürlich filterst Du Dir damit auch noch alle anderen HTML-Tags heraus. Andrerseits hast Du dann Strings, in denen die Kombination <h2 ... </h2> genau einmal vorkommt. Falls Du also alle anderen HTML-Tags behalten willst, dann kannst Du jetzt mit anderen Regexps weiterarbeiten.

Viel Erfolg!

Gruss,

Vinzenz