preg_replace_callback
PHP Manual
PHP Manual»PCRE Funzioni»preg_replace_callback

preg_replace_callback

(PHP 4 >= 4.0.5, PHP 5, PHP 7, PHP 8)

preg_replace_callbackEsegue ricerche e sostituzioni con espressioni regolari usando una callback

Descrizione

function preg_replace_callback(
    mixed $pattern,
    callable $callback,
    mixed $subject,
    int $limit = -1,
    int &$count = ?,
    int $flags = 0
): mixed

Il comportamento di questa funzione è quasi identico a preg_replace(), eccetto per il fatto che invece del parametro replacement, si deve specificare una callback.

Elenco dei parametri

pattern

Il pattern da cercare. Può essere una stringa o un array con stringhe.

callback

Una callback che verrà chiamata e a cui verrà passato un array di elementi corrispondenti nella stringa subject. La callback dovrebbe restituire la stringa di sostituzione. Questa è la firma della callback:

function handler(array $matches): string

Si avrà spesso bisogno della funzione callback per una preg_replace_callback() in un solo posto. In questo caso si può usare una funzione anonima per dichiarare la callback all'interno della chiamata a preg_replace_callback(). In questo modo si hanno tutte le informazioni per la chiamata in un posto e non si ingombra il namespace della funzione con un nome di funzione della callback non utilizzato da nessun'altra parte.

Example #1 preg_replace_callback() e le funzioni anonime

<?php
/* un filtro della linea di comando stile unix per convertire le lettere
 * maiuscole all'inizio del paragrafo in minuscole */
$fp = fopen("php://stdin", "r") or die("can't read stdin");
while (!feof($fp)) {
    $line = fgets($fp);
    $line = preg_replace_callback(
        '|<p>\s*\w|',
        function ($matches) {
            return strtolower($matches[0]);
        },
        $line
    );
    echo $line;
}
fclose($fp);
?>

subject

La stringa o l'array con le stringhe da cercare e sostituire.

limit

Le massime sostituzioni possibili per ogni pattern in ogni stringa subject. Il valore predefinito è -1 (senza limiti).

count

Se specificato, questa variabile sarà riempita con il numero di sostituzioni fatte.

flags

flags può essere una combinazione dei flag PREG_OFFSET_CAPTURE e PREG_UNMATCHED_AS_NULL, che influenzano il formato dell'array delle corrispondenze. Vedere la descrizione in preg_match() per ulteriori dettagli.

Valori restituiti

preg_replace_callback() restituisce un array se il parametro subject è un array, o una stringa in caso contrario. In caso di errori il valore di ritorno è null

Se vengono trovate corrispondenze, verrà restituito il nuovo subject, in caso contrario verrà restituito il valore di subject invariato.

Log delle modifiche

Versione Descrizione
7.4.0 È stato aggiunto il parametro flags.

Esempi

Example #2 Esempio di preg_replace_callback()

<?php
// questo testo veniva usato nel 2002
// vogliamo aggiornarlo per il 2003
$text = "April fools day is 04/01/2002\n";
$text.= "Last christmas was 12/24/2001\n";
// la funzione callback
function next_year($matches)
{
  // come solito: $matches[0] è la corrispondenza completa
  // $matches[1] la corrispondenza per il primo sub-pattern
  // racchiuso in '(...)' e così via
  return $matches[1].($matches[2]+1);
}
echo preg_replace_callback(
            "|(\d{2}/\d{2}/)(\d{4})|",
            "next_year",
            $text);

?>

Il precedente esempio visualizzerà:

April fools day is 04/01/2003
Last christmas was 12/24/2002

Example #3 preg_replace_callback() usando una struttura ricorsiva per gestire codice BB incapsulato

<?php
$input = "plain [indent] deep [indent] deeper [/indent] deep [/indent] plain";

function parseTagsRecursive($input)
{

    $regex = '#\[indent]((?:[^[]|\[(?!/?indent])|(?R))+)\[/indent]#';

    if (is_array($input)) {
        $input = '<div style="margin-left: 10px">'.$input[1].'</div>';
    }

    return preg_replace_callback($regex, 'parseTagsRecursive', $input);
}

$output = parseTagsRecursive($input);

echo $output;
?>

Vedere anche:

To Top