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
Beschreibung
string|array
$pattern,callable
$callback,string|array
$subject,int
$limit = -1,int
&$count = null,int
$flags = 0): string|array|null
Abgesehen von der Tatsache, dass statt des Parameters
replacement ein callback
angegeben werden soll, ist das Verhalten dieser Funktion identisch zu
preg_replace().
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:handler(array$matches): stringHä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 -
flagsist eine Kombination der FlagsPREG_OFFSET_CAPTUREundPREG_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.
Changelog
| Version | Beschreibung |
|---|---|
| 7.4.0 |
Der Parameter flags wurde hinzugefügt.
|
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\.\d\.)(\d)|",
"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;
?>
Siehe auch
- PCRE-Suchmuster
- preg_replace_callback_array() - Perform a regular expression search and replace using callbacks
- preg_quote() - Maskiert Zeichen regulärer Ausdrücke
- preg_replace() - Sucht und ersetzt mit regulären Ausdrücken
- preg_last_error() - Liefert den Fehlercode der letzten PCRE-RegEx-Auswertung
- Anonymous functions

