Regex сопоставляет строки таблицы в HTML

Возможный дубликат:
Лучшие методы анализа HTML с помощью PHP

У меня возникли проблемы с сопоставлением строк таблицы с preg. Вот мое выражение:

<TR[az\=\"a-z0-9 ]*>([\{\}\(\)\^\=\$\&\.\_\%\#\!\@\=\<\>\:\;\,\~\`\'\*\?\/\+\|\[\]\|\-a-zA-Z0-9À-ÿ\n\r ]*)<\/TR> 

Как вы можете видеть, он пытается обработать все промежуточные теги TR (включая все символы). Эта часть отлично работает, однако, имея дело с несколькими строками таблицы, часто требуется несколько строк таблицы в качестве соответствия ONE, а не совпадение для каждого строка таблицы:

 <TR> <TD>test</TD> </TR> <TR> <TD>test2</TD> </TR> 

выходы:

 Array ( [0] => <TD>test</TD> <TD>test2</TD> ) 

а не то, что я хочу:

 Array ( [0] => <TD>test</TD> [1] => <TD>test2</TD> ) 

Я понимаю, что причина этого в том, что она соответствует символам, и поиск, естественно, берет остальные строки до тех пор, пока не ударит последний.

Поэтому, в основном, мне интересно, может ли кто-нибудь помочь мне добавить выражение, чтобы исключить что-либо с «TR» между тегами TR, чтобы предотвратить совпадение нескольких строк.

Попробуйте использовать глобальный поиск:

preg_match_all("/<td>([^<]+)/", $html, $matches);

Используйте ленивое совпадение в вашем регулярном выражении: <tr.*?</tr>

Но, как отмечали другие, более рационально использовать правильный парсер, если можно.