Las capturas $1 $2 y así ya las soporta PCRE por defecto (\1 \2 etc.):
Código PHP:
Ver original$regex = '@\.([a-z_]+)@i';
$texto = '$color.name';
echo preg_replace($regex, '["\1"]', $texto); // $color["name"]
¿Necesitas algo más complejo?
Digo, sigo sin entender para que tanto código.