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
-
flags
ist eine Kombination der FlagsPREG_OFFSET_CAPTURE
undPREG_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