MIt regexp HTML durchsuchen

  • Themenstarter Themenstarter Dragosani
  • Beginndatum Beginndatum
D

Dragosani

Hallo, habe mal wieder eine wahrscheinlich dumme Frage.

Ich möchte via den RegExp eine HTML Datei durchsuchen. Und zwar möchte ich z.B. folgenden String identifiziert haben und Teile davon ausgeben:

PHP:
<p><a href="blah.htm">Test: Versuch1</a></p>

Identifizieren möchte ich das ganze mit dem String "Test: Versuch1", haben möchte ich "Versuch1" ohne die HTML Tags.

Wie mache ich das?

Eigener Ansatz:

PHP:
<?php 
$html = "<p><a href=\"blah.htm\">Test: Versuch1</a></p>
<p><a href=\"blah.htm\">Test: Versuch2</a></p>
";

preg_match_all("/.*Test: Versuch1.*/", $html, $treffer);

foreach ($treffer as $wert) {
  echo "gefunden: " . $wert[0] . "<br>";
    }
?>

Kleine Zusatzfrage: Da wird Zeilenweise ausgewertet, oder? Sprich ich müßte die gesamte Zeile ggf. Filtern, oder? Kann nämlich ab und an auch sein, daß dort noch ein IMG Tag in der Zeile steht.
 
PHP:
<?php 
$html = "<p><a href=\"blah.htm\">Test: Versuch1</a></p>
<p><a href=\"blah.htm\">Test: Versuch2</a></p>
";

preg_match_all("%>Test: (.*)</a%iUs", $html, $treffer);

foreach ($treffer[1] as $wert) {
  echo "gefunden: " . $wert . "<br>";
    }
?>

So in etwa?

Output:
Code:
gefunden: Versuch1<br>gefunden: Versuch2<br>
 
Ja, ganz genau das suchte ich. Vielen Dank schonmal :)

Was bedeutet denn das "%" in dem RegExp? Den Abschluss verstehe ich auch nicht so recht "%iUs".

"i" bedeutet, daß Groß-und Kleinschreibung egal ist, und der Rest?
 
%% verwende ich meist um das Pattern zu begrenzen. Man kann hierfür fast jedes Zeichen verwenden. Es muss forne und hinten an das Pattern rann. Und trennt die Modifier (iUs) von dem Pattern ab.


i - wie du sagtest um die Groß Kleinschreibungserkennung zu deaktivieren

U - Ungreedy -> Das Pattern sucht immer die kleinstmöglichen Matches, statt die Größtmöglichen.

s - Er missachtet Zeilenumbrüche und behandelt alles als ob es in einer einzigen Zeile Stehen würde. Dadurch ändert sich auch ^ und $ vom Zeilenanfang / Zeilenende auf Dateianfang und Dateiende
 
Ah, okay, also kann ich normal weiter meine "/" zum Abtrennen nutzen? :)

Danke Dir für die sehr gute Erklärung!
 
Zurück