Hola
Debes escapar caracteres especiales de expresiones regulares. Por ej: / y [ ]
Código PHP:
foreach ($etiquetas1 as $etiqueta => $html){
$etiqueta = preg_quote($etiqueta);
$cadena=preg_replace("/\[$etiqueta(([^\]]*)?)\](.*?)\[\/$etiqueta\]/", "<$html$1>$3</$html>", $cadena);
}
foreach ($etiquetas2 as $etiqueta => $html){
$etiqueta = preg_quote($etiqueta);
$cadena=preg_replace("/\[$etiqueta(([^\]]*)?)\/\]/", "<$html$1/>", $cadena);
}
Saludos,