No es un problema de HTML, es un problema de expresión regular... Que pena con los 2.
Simplemente tienes que colocar la letra
s, en tu expresión regular, que significa capturar todo (incluyendo nueva línea). Quedaría así:
Código PHP:
Ver original<?php
$k='[B]test[/B]';
$k=preg_replace('@\[B\](.*(\n)*)\[/B\]@s',"<strong>$1</strong>",$k); echo $k;
Saludos.