Tengo un problemilla con preg_replace tengo este codigo q funciona perfectamente

$cadena = '[imagenCentro]-[15]-bla bla bla-[/imagenCentro]';
$patron = '/(\[imagenCentro\])-(\[\d+\])-(\w+)-(\[\/imagenCentro\])/i';
$reemplazo = '$1- $2 - $3 -$4';
echo preg_replace($patron, $reemplazo, $cadena);

la cosa es q $cadena tuviese los "-"

algo asi

$cadena = '[imagenCentro][15]bla bla bla[/imagenCentro]';
$patron = '/(\[imagenCentro\])(\[\d+\])(\w+)(\[\/imagenCentro\])/i';
$reemplazo = '$1- $2 - $3 -$4';
echo preg_replace($patron, $reemplazo, $cadena);

A ver si alguien me puede decir en que falla esto pq solo me reconoce una variable $1
Saludos