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