Возможный дубликат:
Лучшие методы анализа 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>
Но, как отмечали другие, более рационально использовать правильный парсер, если можно.