Felix Riesterer: (PHP) verstehe meine regexp nimmer...

Beitrag lesen

Liebes Forum,

ich möchte auf meiner Seite zwecks einfacher Wartung Unterseiten (die meistens von anderen Autoren stammen) mittles PHP im body-Bereich auslesen und in meiner index.php anzeigen. Dazu ist es oft nötig, Verweisziele zu korrigieren, da der relative Pfad der originalen HTML-Dateien ein anderer ist, als meine index.php.

Mit den Bilderquellen tut das wunderbar per

$html_body = preg_replace('/((?i)src=)"?([\S^>^"]*)/', '\1"'.$ref_korrektur.'\2', $html_body);

Aber bei den Links ist das etwas komplizierter. Es sollen nur relative Links modifiziert werden; Verweisziele wie "http://..." und "mailto:..." sollen unverändert bleiben. Ich scheitere daran, in meiner regexp eben diese Fälle erfolgreich auszuschließen. So weit bin ich heute nacht noch gekommen:

$html_body = preg_replace('/((?i)href=)"?(?!(mailto:[\S^>^"]*)|(http:[\S^>^"]*))([\S^>^"]*)/', '\1"index.php?aktion=informationen&thema='.$ref_korrektur.'\2', $html_body);

Mir sind gleich zwei Dinge nicht klar:
 1. Warum scheitert meine regexp nicht an "mailto:" und "http:"?
 2. Woher kommen denn die schließenden Anführungszeichen (sowohl bei den Bildquellen, als auch bei den Verweiszielen)?

Bin um jeden Denkanstoß dankbar.

Liebe Grüße aus Ellwangen,

Felix Riesterer.