php / regex: ¿Cómo reemplazar parte de un patrón encontrado, pero dejando el resto como está?

¿Cómo puedo reemplazar una subcadena en un patrón encontrado, pero dejando el resto como está?

(EDITAR: el caso real es, por supuesto, más complicado que el siguiente ejemplo, tengo que hacer coincidir las apariciones dentro de las etiquetas xml. ¡Es por eso que tengo que usar expresiones regulares!)

Digamos que quiero cambiar las apariciones de la letra "X" dentro de una palabra a la letra "Z".

quiero

aaXaa aaX Xaa

convertirse

aaZaa aaZ Zaa

Encontrar ocurrencias de palabras como "x" no es un problema, como este:

[^ X \ s]X [^ \ s]

pero un preg_match normal reemplaza la coincidencia completa, donde quiero que todo en el patrón, excepto "X", permanezca como está.

¿Cuál es la mejor manera de lograr esto en PHP?

Respuestas a la pregunta(4)

Su respuesta a la pregunta