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().