preg_replace_callback
(PHP 4 >= 4.0.5, PHP 5, PHP 7, PHP 8)
preg_replace_callback — Sucht und ersetzt mit regulären Ausdrücken unter Verwendung eines Callbacks
Parameter-Liste
pattern
-
Der Ausdruck, nach dem gesucht werden soll. Es kann entweder eine
Zeichenkette oder ein Array mit Zeichenketten sein.
callback
-
Ein Callback, dem ein Array von Übereinstimmungen mit
subject übergeben wird. Der Callback sollte die
Ersetzungs-Zeichenkette liefern. Dies ist die Callback-Signatur:
Häufig werden Sie die callback-Funktion für
preg_replace_callback() nur an einer Stelle
benötigen. In diesem Fall können Sie eine
Anonyme Funktion verwenden,
um innerhalb des Aufrufs von preg_replace_callback()
den Callback zu deklarieren. Auf diese Weise haben Sie alle
Informationen für den Aufruf an einer Stelle und füllen den Namensraum
für Funktionen nicht mit Namen für Callback-Funktionen, die sonst
nirgends verwendet werden.
Beispiel #1 preg_replace_callback() und Anonyme Funktion
<?php
// ein Kommandozeilen-Filter im Unix-Stil zum Umwandeln von Groß- in
// Kleinschreibung am Beginn eines Abschnitts
$fp = fopen("php://stdin", "r") or die("kann stdin nicht lesen");
while (!feof($fp)) {
$zeile = fgets($fp);
$zeile = preg_replace_callback(
'|<p>\s*\w|',
function ($treffer) {
return strtolower($treffer[0]);
},
$zeile
);
echo $zeile;
}
fclose($fp);
?>
subject
-
Die Zeichenkette oder ein Array mit Zeichenketten zum Suchen und
Ersetzen.
limit
-
Die Höchstzahl der Ersetzungen für jedes Suchmuster in jeder
subject-Zeichenkette. Standardmäßig
-1 (unbegrenzt).
count
-
Falls angegeben, wird dieser Variable die Anzahl vorgenommener
Ersetzungen zugewiesen.
flags
-
flags ist eine Kombination der Flags
PREG_OFFSET_CAPTURE und
PREG_UNMATCHED_AS_NULL, die das Format des
matches-Arrays beeinflussen. Details sind der Beschreibung in
preg_match() zu entnehmen.
Rückgabewerte
Falls subject ein Array ist, gibt
preg_replace_callback() ein Array zurück und andernfalls
eine Zeichenkette. Bei einem Fehler ist der Rückgabewert null.
Falls Übereinstimmungen gefunden werden, wird die neue Zeichenkette
zurückgegeben und andernfalls die unveränderte Zeichenkette
subject
Fehler/Exceptions
Wenn das übergebene Regex-Muster nicht zu einem gültigen Regex kompiliert werden
kann, wird ein Fehler der Stufe E_WARNING ausgegeben.
Beispiele
Beispiel #2 preg_replace_callback()-Beispiel
<?php
// dieser Text wurde 2002 verwendet
// wir wollen ihn für 2003 aktualisieren
$text = "Aprilscherze gibts am 01.04.2002\n";
$text.= "Das letzte Weihnachten war am 24.12.2001\n";
// die Callback-Funktion
function naechstes_jahr($treffer)
{
// wie üblich: $treffer[0] ist die Übereinstimmung mit dem
// kompletten Suchmuster, $treffer[1] die Übereinstimmung mit
// dem ersten eingeklammerten Teilsuchmuster und so weiter
return $treffer[1].($treffer[2]+1);
}
echo preg_replace_callback(
"|(\d{2}\.\d{2}\.)(\d{4})|",
"naechstes_jahr",
$text);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Aprilscherze gibts am 01.04.2003
Das letzte Weihnachten war am 24.12.2002
Beispiel #3
preg_replace_callback() unter Verwendung einer
rekursiven Struktur um gekapselten BB-Code zu verarbeiten
<?php
$eingabe = "plain [indent] deep [indent] deeper [/indent] deep [/indent] plain";
function parseTagsRecursive($eingabe)
{
$regex = '#\[indent]((?:[^[]|\[(?!/?indent])|(?R))+)\[/indent]#';
if (is_array($eingabe)) {
$eingabe = '<div style="margin-left: 10px">'.$eingabe[1].'</div>';
}
return preg_replace_callback($regex, 'parseTagsRecursive', $eingabe);
}
$ausgabe = parseTagsRecursive($eingabe);
echo $ausgabe;
?>