Парсинг HTML-таблицы с помощью регулярных выражений?..

программирование php регулярные выражения

Дано: HTML-таблица, выглядящая примерно так:

---------------------------------------------------------
| № п/п | Свойство | Значение |
---------------------------------------------------------
| 1 | Блаблабла | Блаблабла |
| 2 | Блаблабла | Блаблабла |
| 3 | Блаблабла | Блаблабла |
| 4 | Блаблабла | Блаблабла |
| 5 | Группа свойств |
| | Бла11 | Бла12 |
| | Бла21 | Бла22 |
| | Бла31 | Бла32 |
| 6 | Блаблабла | Блаблабла |
| 7 | Блаблабла | Блаблабла |
| 8 | Блаблабла | Блаблабла |
---------------------------------------------------------


Нужно получить, соответственно, свойства и значения. Всё бы ничего, но картину портят такие строчки как 5-я. Там первая ячейка идёт с rowspan-ом, вторая с colspan-ом, и в дальнейших "подсвойствах" идёт по два столбца, без номера. Выходом было бы определять наличие/отсутствие номера в строке, но так как исходная таблица свёрстана идиотами, в КАЖДОЙ ячейке могут содержаться многочисленные <span style="">, <strong>, <i> - короче, любые теги, и "чистый" номер нигде не находится.

Сейчас я пытаюсь делать это как-то так:

$tablepattern = '/<tr[^<>]*>'
.'<td[^<>]*>'
.'(.*?)' # $r[1] - первый столбец, там "№ п/п", он ненужен
.'<\/td>'
.'<td[^<>]*>'
.'(.*?)' # $r[2] - второй столбец, имя свойства
.'<\/td>'
.'<td[^<>]*>'
.'(.*?)' # $r[3] - третий столбец, значение свойства
.'<\/td>'
.'<\/tr>/';
preg_match_all ($tablepattern, $TEXT, $r)

На выходе, "благодаря" rowspan-ам и colspan-ам, получаются такие вещи как "5 - Группа свойствБла11 - Бла12", а затем "Бла22 - Бла31 - Бла32".

Помогите, плиз, что же делать?

Примечание:
SibVision, спасибо, так действительно проще.
Просто я совсем недавно впервые вкурил, как делаются регулярные выражения, вот на них и зациклился... =)
Ответы:
Для этого существует domDocument
Здесь пример с парсером таблицы http://parsing-and-i.blogspot.com/2009/08/html-php.html


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.