Ciao, ho due problemi con le espressioni regolari (sempre che sia possibile usarle in questi casi)

1) Ipotizzando questo codice html
codice:
<div id="notizia">
     <div id="data">11 gennaio 2009</div>
     <div id="testo">testo della notizia</div>
</div>
<div id="separatore"></div>
posso catturare tutto il contenuto del div "notizia"?
Se provo <div [^>]*>.*</div> ovviamente viene catturato tutto fino al </div> di separatore


2) Dovrei cercare un tag che delimita un testo (ben preciso) in un file. Esempio:
codice:
<div id="notizia">
     <div id="data">11 gennaio 2009</div>
     <div id="testo">testo della notizia </div>
</div>
<div id="separatore"></div>
io conosco solo "testo della notizia" e da qui dovrei risalire a "<div id="testo">".
Il problema è che nell'html c'è il [b] di mezzo..
Di contro neanche posso usare striptags perchè il tag precedente mi serve (e a priori non so se sia un div, un td, uno span)
E' possibile far qualcosa o mi conviene scrivere un parser?