Yo lo que hice cuando me ocurrían cosas parecidas, era hacerlo en 2 pasos. Primero modificas como lo haces, y luego modificas que los
<b sean
<b>, y los
</b sean
</b> Código PHP:
$pattern="/(>+)/";
$string = preg_replace( $pattern, " ", $string );
$string = str_replace( "<b", "<b>", $string);
$string = str_replace( "</b", "</b>", $string);
Debería ir creo..
Saludoss