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
- Anwendungsbeispiele
- Aufbau von Regulären Ausdrücken
- Backreferences
- Delimiter
- Der Backslash
- Metazeichen
- Modifier
- PHP-Funktionen
- preg_replace()
- Quantifier
- Unterausdrücke
- Zeichenklassen
Kapitelnavigation
- Letzte Änderung: 24.07.2010, 03:39:02
- © 2003 - 2010 nophia web