Regex zeigt zu viel an

Wenn dein Code aus dem ersten Posting jetzt funktioniert ist ja alles OK. Aber es kann nicht schaden, den Dingen auf den Grund zu gehen.

Bei diesem Code:
Code:
<?php
$datei = '<a href="file:///Users/frankpaul/Library/Mobile%20Documents/com~apple~CloudDocs/WSL_CMS/home.html"><span class="s2"><span class="s2">Ho3wewewepo5e</span></a>';
$datei = htmlentities($datei);
preg_match('//<a\s+href.*>([^<]+)<.*<\/a>/gm/', html_entity_decode($datei), $matches);
echo "ERGEBNIS: ".$matches[1];
?>
gibt es folgende Probleme:
  • Ganz am Anfang ist ein Schrägstrich zu viel.
  • preg_match akzeptiert keine Modifier, braucht man sie, muss man preg_match_all verwenden.
Dies funktioniert dann:
Code:
    $datei = '<a href="file:///Users/frankpaul/Library/Mobile%20Documents/com~apple~CloudDocs/WSL_CMS/home.html"><span class="s2"><span class="s2">Ho3wewewepo5e</span></a>';
    $datei = htmlentities($datei);
    var_dump($datei);
    var_dump(html_entity_decode($datei));
    preg_match_all('/<a\s+href.*>([^<]+)<.*<\/a>/m', html_entity_decode($datei), $matches);
    var_dump($matches);

Nach meinem Wissen gehört an den Anfang und das Ende des Regex ein Slash.
Das ist vollkommen richtig. Was ich meinte, waren die Backslashes vor den spitzen Klammern, aber da hatte ich eine Wissenslücke, denn @Yaslaw hat aufgeklärt, dass die spitzen Klammern doch eine Sonderbedeutung haben können.

Die Zeichen am Anfang und Ende des Regex müssen übrigens nicht unbedingt Slashes sein, dies funktioniert genau so:
Code:
    preg_match_all('|<a\s+href.*>([^<]+)<.*</a>|m', html_entity_decode($datei), $matches);
Das kann praktisch sein wenn man viele Slashes in der Regex hat, dann muss man sie nicht alle escapen und es wird lesbarer. Wie Du siehst, konnte ich den Backslash im </a> weg lassen ohne dass es ein Problem gegeben hat.
 
Hallo Jungs,
vielen Dank für die tollen Beiträge. Dein Code @Sempervivum funktioniert soweit perfekt, nur in meinem Gesamtcode noch nicht. Aber das sollte ich schnell auch mit meinem Wissen hin bekommen. Sonst komme ich gern nochmal auf Euch zu, wenn das ok ist.
Bis dahin schöne Grüße
Frank
 
Zurück