Ostatnio miałem ten sam problem :| Nie jestem dobry z wyrażeń regularnych - praktycznie nie mam o nich bladego pojęcia, wiem tylko że istnieją - i jeśli nie muszę, nie korzystam z nich. Będę wdzięczny jeśli ktoś wytlumaczy to tutaj na przykładzie używając tych wyrażeń.
Jednakże jeśli nie mogłem sobie dać rady wyrażeniami regularnymi więc musiałem znaleźć inną drogę

Proponuję ci to rozwiązać przez użycie pętli while i strpos oraz substr ^^.
Przykład:
Kod
while(($p = strpos($stog, '<tr bgcolor="#cfcfcf">', $k)) != false) {
// teraz znajdujemy koniec, poszukiwany od ostatniego $p - poczatka :P
$k = strpos($stog, "</tr>", $p);
// wycinamy to przez dodanie do poczatku znaleziska + dlugosc tego wyrazenia (w tym przypadku 22 znaki), dlugosc obliczamy przez odjecie konca od poczatku ^^
$wartosci[] = substr($stog, $p+22, $k-($p+22));
jeśli gdzieś się nie kropnąłem z nawiasami to powinno podziałać