Tom: Bedeutung des Regular Expression Pattern

Beitrag lesen

Hello,

Ich hätte noch eine Verständnisfrage dazu. (damit man noch was lernt :-) )

Nur noch mal der Vollständigkeit halber die Lösung:
$site = preg_replace('#<a[^<>]*?href="http://[^<>]*?>(.*?)</a>#is', '$1', $site);

Wenn man von solch einem ganz normalen Link ausgeht:
<a href="http://www.test.html">Hier entlang</a>

Was genau bedeutet [^<>]  im Suchmuster nach <a ?

'               Nicht interpretierender Stringbegrenzer für PHP
#               Patternbegrenzer für die Reg Ex Engine, relativ frei wählbar
                   er sollte aber im Pattern selber nicht vorkommen
<a              Diese Zeichen sollen vorkommen
[^<>]*?         darauf folgen Zeichen einer Zeichenklasse, die sich beliebig oft (*)
                   wiederholen und 'gefräßig' gemacht wurden, also alles einsammeln,
                   wenn das Pattern sonst nicht erfüllt werden kann (?).
                   In der Zeichenklasse sind alle Zeichen vorhanden _außer_ (^) < >.
href="http://   Diese Zeichen müssen folgen
[^<>]*?         es folgen wieder die Zeichen einer Zeichenklasse s.o.

Dieses Zeichen soll folgen

(.*?)           nun folgt eine Suchgruppe (-> Backreferenz).
                   in der gesuchten (unbekannten) Zeichenfolge dürfen alle Zeichen enthalten
                   sein, beliebig oft und 'gefräßig'
</a>            diese Zeichen müssen folgen
#               Ende des Patterns
i               Die Suche soll Case-Insenitive durchgeführt werden
s               der Punkt (.) als "ein beliebiges Zeichen" schließt auch Whitespaces, also
                   auch Zeilenumbrüche mit ein.
'               Ende des PHP-Strings

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de