Cita: no se porque el codigo cuando por ejemplo, ya consigo ["name"].. hago un echo, y el echo devuelve ["name"]... ahora cuando uso un return desde el callback, despues echo preg_replace_callback... me devuelve ["["name"]"]
Eso se debe a lo siguiente:
preg_replace_callback() usa una función callback para el reemplazo, lo que sea que devuelvas se usará como reemplazo.
Tu error era que dentro del callback hacías tus propios reemplazos, y desde luego eso provocaba los reemplazos duplicados o mal formados, etc.