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 flagswurde 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
 
                     
                     
                     
                     
                    
 
          