Извлечение html-таблицы из регулярного выражения с использованием функции PHP preg_match_all

Я хочу извлечь таблицу из HTML-страницы, которая содержит вложенные теги HTML-таблицы, после чего я хочу извлечь <td> а также <tr>столов.

Я использую это. Работает нормально для <b> а также </b>

$file = file_get_contents($url);
preg_match_all ("/<b>(.*)<\/b>/U", $file, $pat_array);
print $pat_array[0][0]." <br> ".$pat_array[0][1]."\n";

Кто-нибудь может сказать мне регулярное выражение для вложенного <table (some table properties)> некоторые данные с использованием <tr> а также <td> </table>, Пожалуйста, сохраните ссылку, если она присутствует в <tr> или же <td> поля, и имейте в виду необходимые таблицы.

Пример:

$file = "<html> <head> <title> asdf </title> </head> <body bgcolor = red >  <table border = 1> <table bgcolor = white> (some tr and td data > </table> </table></body> </body> </html>"
preg_match_all ("regular expression for table tag", $file, $pat_array);
print $pat_array[0][0]." <br> ".$pat_array[0][1]."\n";

Обновление 1:

Когда я попробовал ниже код, он показывает ошибку:

Примечание: неопределенное смещение: 0 в C: \ xampp \ htdocs \ testphp \ tabledata.php в строке 27

Код:

$file = file_get_contents($url);
$pat_array = Array();
preg_match_all ("/<tr>(.*)<\/tr>/U", $file, $pat_array);
print $pat_array[1][0];

Кто-нибудь может мне помочь с этой ошибкой?

0

Решение

Не пытайтесь анализировать HTML с регулярным выражением, используйте DOMDocument а также DOMXpath вместо.

$dom = new DOMDocument();
$dom->loadHtml($file);

$xpath = new DOMXpath($dom);
$tableNodes = $xpath->query('//table'); // select all table nodes

// do something, e.g. print node content
foreach ($tableNodes as $tableNode) {
print $tableNode->nodeValue;
}

Есть намного больше вариантов запроса, которые вы можете выполнить с помощью xpath, посмотри здесь.
Кроме того, вы, вероятно, хотите сделать что-то еще с выбранными узлами, чем просто печать содержимого. Если вы ищете под DOM каждой таблицы, попробуйте это:

foreach ($tableNodes as $tableNode) {
$newDom = new DOMDocument();
$clone = $tableNode->cloneNode(true);
$clone = $newDom->importNode($clone, true);
$newDom->appendChild($clone);

$html = $newDom->saveHTML();
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]