Problem mit Reguläre Ausdrücke

Lomo_2004

Grünschnabel
Hi ho,

hab ein kleines Problem mit Regürlären Ausdrücken im Moment. Ich möchte eine Ausgabe nachträglich abändern. Zurückgeliefert wird mir eine komplette HTML-Seite. Diese soll als HTML-Text in der E-Mail versendet werden.

In diesen HTML-Seiten sind allerdings die Links noch entsprechend auf die Orginal-Seite gesetzt.
z.B. <a href="startseite.html">zur startseite</a>
Dies soll dann folgend ergänzt werden:
<a href="http://www.meine-seite.de/startseite.html">zur startseite</a>


anfangs probierte ich es so:
PHP:
$suchmuster = "/href=\"(.*?)\" /";
$ersetzungen = "/href=\"http://www.meine-seite.de/(.*?)\" /";
echo preg_replace($suchmuster, $ersetzungen, $html);

Leider berücksichtigt er in der Ersetzung aber nicht das Muster sondern schreibt es einfach so rein.
Die Ausgabe sieht dann z.b. so aus:

<a /href="http://www.meine-seite.de/(.*?)" />starseite</a>

weiß jemand wie man sowas lösen könnte ?

mfg
Matthias
 
Zuletzt bearbeitet:
Schau dir bitte die Funktionsbeschreibung von [phpf]preg_replace[/phpf] an und schau wie die Ersetzung gemacht wird.

Die Zeichenkette oder das Array mit Zeichenketten zum Ersetzen. Falls dieser Parameter eine Zeichenkette ist und der Parameter pattern ein Array, werden alle Suchmuster durch diese Zeichenkette ersetzt. Falls sowohl pattern als auch replacement Arrays sind, wird jedes pattern durch das Gegenstück aus replacement ersetzt. Wenn das replacement -Array weniger Elemente hat als das pattern -Array, wird jedes überzählige pattern durch die leere Zeichenkette ersetzt.

replacement darf Referenzen in der Form \\n oder (ab PHP 4.0.4) $n enthalten, wobei Letztere vorzuziehen ist. Jede dieser Referenzen wird mit dem Text ersetzt, der vom n-ten eingeklammerten Suchmuster erfasst wurde. n kann einen Wert von 0 bis 99 haben. \\0 oder $0 beziehen sich auf den Text, der auf das komplette Suchmuster passt. Um die Nummer des erfassenden Teil-Suchmusters zu erhalten, werden öffnende Klammern mit 1 beginnend von links nach rechts gezählt. Um einen Backslash im Ersatz zu verwenden, muss er verdoppelt werden ("\\\\" PHP-Zeichenkette).

Wenn Sie mit einer Ersetzung arbeiten wollen, in der auf eine Rückreferenzierung direkt eine weitere Zahl folgt (d.h., direkt nach der Übereinstimmmung mit einem Suchmuster soll eine Zahl kommen), können Sie für Ihre Rückreferenzierung nicht die Schreibweise \\1 verwenden. So würde z.B. \\11 die Funktion preg_replace() verwirren, weil sie nicht weiß, ob Sie die Rückreferenzierung \\1 gefolgt von der Zahl 1 wollen oder nur die Rückreferenzierung \\11. In diesem Fall ist die Lösung, \${1}1 zu verwenden. Damit wird eine isolierte Rückreferenzierung $1 erzeugt und die 1 bleibt ein Buchstabensymbol.

Wenn Sie den Modifikator e verwenden, maskiert diese Funktion ein paar Zeichen (nämlich ', ", \ und NULL) in den Zeichenketten, mit denen die Rückreferenzierungen ersetzen werden. Das wird gemacht, um sicherzustellen, dass keine Syntaxfehler entstehen, wenn Rückreferenzierungen verwendet werden, die einfache oder doppelte Anführungszeichen enthalten (z.B. 'strlen(\'$1\')+strlen("$2")'). Vergewissern Sie sich, dass Sie die Zeichenketten-Syntax von PHP kennen, um genau zu wissen, wie die ausgewertete Zeichenkette aussieht.

:rtfm:

/edit:
Zu spät ;)
 
Zurück