Come si usa preg_replace_callback in PHP

Come si usa preg_replace_callback in PHP

In PHP esistono diversi modi per sostituire delle stringhe all'interno di un testo. La funzione più conosciuta probabilmente è str_replace() che accetta come parametri una stringa da cercare, una stringa da usare come sostituzione e la stringa su cui agire. A volte però questa funzione non è sufficiente e quindi bisogna trovare altre soluzioni. Ecco quindi che troviamo preg_replace() che permette di usare delle espressioni regolari per identificare i pattern su cui agire, anche questa funzione però ha delle limitazioni, in particolare non permette di processare attraverso una funzione le sottostringhe rilevate per poi poterle usare come rimpiazzo.

La funzione preg_replace_callback() in PHP

Grazie a preg_replace_callback() siamo quindi in grado di richiamare una funzione callback, alla quale verranno passate come parametro le stringhe catturate dall'espressione regolare, che restituirà le nuove stringhe per la sostituzione.

La definizionedi preg_replace_callback() è:

mixed preg_replace_callback ( mixed $pattern , callback $callback , mixed $subject [, int $limit = -1 [, int &$count ]] )

Mentre una funzione di callback solitamente è nella forma:

function nome_callback($matches){
  return foo($matches[0]);
}

Ogni sottostringa identificata dal pattern viene quindi passata sotto forma di vettore alla callback dove $matches[0] è la sottostringa completa, mentre $matches[1] è il primo eventuale subpattern (ovvero una sotto-sottostringa identificata da delle parentesi tonde nella espressione regolare) e così via.

Nel caso non si voglia sporcare il namespace delle funzioni con una callback, è anche possibile definire la funzione direttamente all'interno del comando preg_replace_callback() attraverso una funzione anonima (chiusura) o grazie a create_function() che praticamente implementa una funzione di tipo lambda.