h tags per regex ermitteln
Michael
- php
Hi, ich versuche gerade alle h tags also Überschriften aus dem Quellcode einer Seite per einem regex in PHP zu ermitteln.
Leider funzt das ganze noch nicht so, wie es soll. Bei manchen Seiten klappts, bei anderen nicht.
Das ist was ich soweit habe:
preg_match_all('#<h\d{1}\s*.*>(\s*\w*-*.*\s*)*</h\d{1}>#i', $string, $result);
$string ist der Quelltext einer Seite
$result sind die Treffer (array)
Woran könnte das liegen, was stimmt am regex nicht?
Wäre nett, wenn mir jemand von euch weiterhelfen könnte.
Michael
hi,
Woran könnte das liegen, was stimmt am regex nicht?
Vermutlich stimmt daran nicht, dass er nicht das sucht, was du suchst.
Was du suchst, beschreibst du uns leider nicht.
(Nein, du suchst keine "h tags" - du suchst ganz bestimmte Zeichen-Muster. Welches das sein sollen, hast du nicht mal ansatzweise beschrieben.)
Lies bitte </hilfe/charta.htm#tipps-fuer-fragende>
gruß,
wahsaga
hi,
Woran könnte das liegen, was stimmt am regex nicht?
Vermutlich stimmt daran nicht, dass er nicht das sucht, was du suchst.
Was du suchst, beschreibst du uns leider nicht.
(Nein, du suchst keine "h tags" - du suchst ganz bestimmte Zeichen-Muster. Welches das sein sollen, hast du nicht mal ansatzweise beschrieben.)Lies bitte </hilfe/charta.htm#tipps-fuer-fragende>
gruß,
wahsaga
»»
Okay, dann beschreibe ich das nochmal ein bisschen anders:
Ich suche folgenden Muster:
<h3 class="htag">Text</h3>
oder auch
<h3>Text</h3>
oder auch
<h1>Text</h1>
also alle htags von 1-6 mit oder ohne id oder class.
»
Okay, dann beschreibe ich das nochmal ein bisschen anders:
Ich suche folgenden Muster:
<h3 class="htag">Text</h3>
oder auch
<h3>Text</h3>
oder auch
<h1>Text</h1>
also alle htags von 1-6 mit oder ohne id oder class.
Nur damit jemand, der das gleiche Problem hat, eine Lösung hat. Hab mich nochmal rangesetzt.
So scheint es zu klappen:
preg_match_all('/<h([1-6])(\s*.*)>(.+?)</h\1>/is', $string, $result);
Danke.
Michael
Hallo Michael,
Nur damit jemand, der das gleiche Problem hat, eine Lösung hat. Hab mich nochmal rangesetzt.
So scheint es zu klappen:
preg_match_all('/<h([1-6])(\s*.*)>(.+?)</h\1>/is', $string, $result);
Klasse, nicht die Lösung (hab ich nicht probiert) aber
dass du nachdem du selbst die Lösung findest auch diese hier
aus genau dem Grund postest, welchen du beschrieben hast:
"Nur damit jemand, der das gleiche Problem hat.."
Oft sagen hier nicht mal Leute Bescheid wenn Sie eine Lösung
hier erhalten haben, ob es denn nun klappt.
Also dein Verhalten finde ich super und werde mir auch selbst ein
Beispiel daran nehmen.
carpe diem
Pia
Hi,
Hi, ich versuche gerade alle h tags also Überschriften aus dem Quellcode einer Seite per einem regex in PHP zu ermitteln.
Leider funzt das ganze noch nicht so, wie es soll. Bei manchen Seiten klappts, bei anderen nicht.
Das ist was ich soweit habe:
preg_match_all('#<h\d{1}\s*.*>(\s*\w*-*.*\s*)*</h\d{1}>#i', $string, $result);
#<h\d{1}\s*
Bis hierhin sollte es ok sein. Wobei ich '*' durch '?' ersetzen wuerde.
.*
Hier suchst soviele beliebige Zeiche wie moeglich. Wobei '.' auch das > miteinschliest. Stichwort gieriges Verhalten.
Sollte wieder passen.
(\s*\w*-*.*\s*)*
Was du hier vorhast weiss ich nicht.
</h\d{1}>#
Passt wohl auch wieder.
mfG,
steckl