You probably know that this will stop "greediness"
preg_match('/<tr[>]>(.|\s)?<\/tr>/',$string,$a);
The question mark means "look forward to the next character or group, and stop if you see one, and move the cursor forward on the match", so the above would only get a single table row UNLESS THERE IS ANOTEHR TABLE NESTED in that table.
I have attached a function which if you read through you'll thankful for I hope. it reads XML tags but can be applied to tables -- it looks for the instance of <tagtype> in this case <table>, and gets the string up to the </tagtype> even if there are nested tags of that type in between.
Not a lot of time to explain but there are notes. If you like it write some comments and PM me and I'll add it to notes. This is a very flexible function. Regex is one of my favorite things.
Sam