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

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:

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: