Una soluzione alternativa alle regular expressions (che spesso con il markup HTML hanno qualche difficolta') e' usare Simple HTML DOM Parser. Esempio:
Codice PHP:
require 'simple_html_dom.php';
$testo = 'testo prima <div id="tuodiv">
Ho comprato un capitello
</div> testo dopo';
$html = str_get_html($testo);
$html->find('#tuodiv', 0)->innertext = "nuovo contenuto del div";
echo $html;