O mejor aún, usando comillas simples (ya que en ningún momento se usa una variable dentro de la cadena:
Código PHP:
Ver original$texto = preg_replace('@\[color="?(#[0-9a-f]{0,6}|[a-z]+)"?](.*)\[/color]@Ui', '<span style="color: $1;">$2</span>', $texto);