Ersetzen durch Callback-Funktion - preg_replace_callback()

In Fällen, wo die Verwendung von preg_replace() und dem Modifier e zu kompliziert oder zu unflexibel erscheint, kann und sollte man diese hier beschriebene Funktion verwenden. Sie verhält sich quasi genauso wie preg_replace(), mit dem Unterschied, dass der Ersatzstring nicht mehr direkt angegeben wird, sondern durch eine Funktion generiert wird. Dazu muss an der Stelle des Ersatzstrings eine Callback-Funktion angegeben werden.

Die Syntax lautet demzufolge auch ähnlich: mixed preg_replace_callback (mixed Suchmuster, callback Callback, mixed Zeichenkette [, int Limit [, int &Anzahl]]) Weitere Informationen finden Sie im Abschnitt preg_replace() dieses Tutorials, hier wird lediglich der Einsatz der Callback-Funktion erläutert.

Aufruf der Callback-Funktion

Um die zu verwendende Callback-Funktion anzugeben, muss ihr Name lediglich als Parameter Callback übergeben werden. Der Name muss als String vorliegen, also in ' oder " eingeschlossen sein. Der folgende Code <?PHP $inhalt preg_replace_callback($pattern'meine_funktion'$inhalt); ?> würde zum Beispiel die Funktion meine_funktion() als Callback aufrufen.

Aufruf einer Methode als Callback-Funktion

Ist die zu benutzende Callback-Funktion Teil eines Objektes, kann sie nicht einfach als String angegeben werden. Sie muss als Array angegeben werden, bei der das erste Element die Objekt-Instanz-Variable und das zweite der Funktionsname als String ist.

Im folgenden Beispiel <?PHP $inhalt preg_replace_callback($pattern, array($meine_instanz'meine_methode'), $inhalt); ?> wird die Methode meine_methode() der Objekt-Instanz $meine_instanz als Callback angegeben.

Aufbau der Callback-Funktion

Die Callback-Funktion ist recht einfach aufgebaut. Ihr wird ein Parameter übergeben, der als Array alle Treffer und Unterausdrücke erhält. <?PHP function meine_callback_funktion($treffer) { ... return $neuer_ersatz; } ?> In der Funktion können dann beliebige Operationen vorgenommen werden. Die Rückgabe wird dann von preg_replace_callback() als Ersatzstring verwendet.

Beispiel für den Einsatz einer Callback-Funktion

Das im vorherigen Kapitel gezeigte Beispiel, welches Tags der Form [url=http://regexp-evaluator.de]RegExp-Evaluator[/url] in Verweise und dabei den Verweistext in Großbuchstaben wandelt, lässt sich auch durch den Einsatz von preg_replace_callback() umsetzen.

Als Suchmuster verwenden wir wieder #\[url=(.*)\](.*)\[/url\]#Uis was zusammen mit preg_replace_callback() folgenden Code ergibt: <?PHP $inhalt preg_replace_callback('#\[url=(.*)\](.*)\[/url\]#Uis''ersetzen'$inhalt); ?> Dieser Code würde also im Falle eines Treffers die angegebene Callback-Funktion aufrufen. Diese müssen wir jetzt noch entwickeln.

Die Funktion bekommt ein Array mit den Treffern übergeben. Wir extrahieren daraus die URL und den Verweistext und generieren daraus den HTML-Code für den Verweis, den wir dann als Rückgabe verwenden. <?PHP function ersetzen($treffer) { // // Die URL steht im ersten Unterausdruck // $url $treffer[1]; // // Der Verweistext im zweiten Unterausdruck // $verweistext $treffer[2]; // // Wir basteln den Verweis zusammen // $link '<a href="'.$url.'">'.$verweistext.'</a>'; // // Und geben ihn zurück // return $link; } ?> Die Rückgabe der Callback-Funktion wird von preg_replace_callback() dann als Ersatzstring verwendet und wir haben somit unser Ziel erreicht.

Verwandte Themen
Kapitelnavigation