Think about this, with white space, nested tags, etc., regex's are complex. Try using this function I wrote; it's got a few notes in it but will do what you want.
Basically, what you're looking for requires you break it down into smaller chunks for people here on the forum; to do what you want to do is some work.
to see how the code works use it this way:
$string=implode('',file('myfile.htm')); //file you want to parse
include('function_xml_read_tags_v131.php');
$a=xml_read_tags($string, 'tr');
echo "<pre>";
print_r($a);
echo "</pre>";
This should give you starting and ending points, you can use this to get substr() calls (which is very fast).
Sam