bella storia.. l'unica cosa che farei è un doppio replace

$textarea = ereg_replace("\B\]","\[B\]",$textarea);
$textarea = ereg_replace("\[B\","\[B\]",$textarea);

e poi $textarea = ereg_replace("\[B\]","[b]",$textarea);

ma poi non è neanche detto, perchè se li dimentica entrambi sono problemi.. perchè di certo nn puoi fare:

$textarea = ereg_replace("B","\[B\]",$textarea);

altrimenti ogni "B" nel testo viene convertita..

cmq, capita in tanti casi? io ho usato una cosa simile per un portale che pesca i thread da un cms, e devo dire che è sempre funzionato bene..