$contents = str_replace("<test>", "<test><b>", $contents);
$contents = str_replace("</test>", "</b></test>", $contents);
И не надо лишних телодвижений
Но Патриот на самом деле хотел не того. Жирный шрифт имелось ввиду "выделенное жирным шрифтом".
Модифицируя пример sergadm для общего случая можно поулчить:
PHP:
<?php
$str='abcdefg<test> cool </test>qwertyu 1231344325<test> cool </test>78945645';
$sh="~<test>.*?</test>~is";
preg_match_all($sh,$str,$s);
print_r($s);
?>
результат смотреть в html.
Скобочки не нужны, так как они охватывают весь паттерн.