se vuoi usare una funzione per il pattern di sostituzione, devi usare
preg_replace_callback()

preg_replace() accetta solo una stringa come secondo parametro, non una funzione.