use preg...
there are two things you can do. so long as you don't have nested bold tags you can use
/;b([]?);b/
*? is a so called "ungreedy" quantifier that matches as little as possible.
if you do have nested tags, you can try
/;b(()[*]);b/
(?!;b) is called "negative lookahead", () matches any [] not followed by a ;b. of course, you need to put in the extra [*] to match the final character to be bolded, but that's not too much of a trial.
--
rad