usa
preg_replace_callback(), o bien el modificador de evaluación en la expresión...
la cadena que te esta dando error es simplemente porque se evalúa al momento de definirla, porque al fin y al cabo se trata de php activo.... si la idea es evaluar dicha frase después, ya con el reemplazo, pues has lo que te sugiero...
Código PHP:
// con modificador
echo preg_replace('/x/e', '"string" . strtoupper("\\0") . "other_string"', 'xyz');
// con callback
echo preg_replace_callback('/x/', function($matches) {
return "string" . strtoupper($matches[0]) . "other_string";
}, 'xyz');