preg_replace_callback
(PHP 4 >= 4.0.5)
preg_replace_callback -- Esegue ricerche e sostituzioni con espressioni regolari
usando il callback
Descrizione
mixed
preg_replace_callback ( mixed espressione_regolare, callback callback, mixed testo [, int limite])
Fondamentalmente questa funzione si comporta come
preg_replace(), eccetto che per la
presenza del callback. Con quest'ultimo
parametro si indica una funzione da richiamare a cui verrà
passata una matrice con i testi riconosciuti in testo.
La funzione di callback dovrebbe restituire la stringa da sostituire.
Esempio 1. Esempio dell'uso di preg_replace_callback() <?php
// questo test è stato usato nel 2002
// lo si vuole avere aggiornato per il 2003
$text = "April fools day is 04/01/2002\n";
$text.= "Last christmas was 12/24/2001\n";
// la funzione di callback
function next_year($matches) {
// come solito: $matches[0] è il testo riconosciuto completo
// $matches[1] la parte riconosciuta per il primo criterio
// 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 risultato sarà:
// April fools day is 04/01/2003
// Last christmas was 12/24/2002
?> |
|
Spesso si ha la necessità di richiamare la funzione callback
soltanto in un unico posto.
In questo caso si può utilizzare create_function()
per dichiarare una funzione anonima come callback per
preg_replace_callback().In questo modo si
hanno tutte le informazioni per la chiamata in un unico posto
e non si disperde con funzioni di callback non
utilizzate altrove.
Esempio 2. preg_replace_callback() e create_function() <?php
// Un filtro da linea di comando stile Unix che converte
// la maiuscole poste all'inizio delle parole in minuscolo
$fp = fopen("php://stdin", "r") or die("can't read stdin");
while (!feof($fp)) {
$line = fgets($fp);
$line = preg_replace_callback(
'|<p>\s*\w|',
create_function(
// l'apice singolo è essenziale qui,
// o in alternativa occorre usare la sequenza di escape \$
// per tutte le occorrenze di $
'$matches',
'return strtolower($matches[0]);'
),
$line
);
echo $line;
}
fclose($fp);
?> |
|
Vedere anche preg_replace() e
create_function().