preg_match () найти все значения внутри таблицы? - PullRequest
1 голос
/ 09 февраля 2011

Привет, ребята, функция curl возвращает строковый $ widget, который содержит обычный html -> два div, где первый div содержит таблицу с различными значениями внутри <td>.

Интересно, какой самый простой и лучший способ для меня извлечь только все значения внутри <td>, чтобы у меня были пустые значения без оставшегося html.

есть идеи, как должен выглядеть шаблон для preg_match?

спасибо.

Ответы [ 4 ]

2 голосов
/ 09 февраля 2011

Regex не является подходящим решением. Вам лучше загрузить его в DOMDocument и проанализировать его.

1 голос
/ 09 февраля 2011

Вы делаете ставку, используя DOM-парсер для этой задачи:

$html = <<<HTML
<div>
<table>
   <tr>
      <td>foo</td>
      <td>bar</td>
   </tr>
   <tr>
      <td>hello</td>
      <td>world</td>
   </tr>
</table>
</div>
<div>
   Something irrelevant
</div>
HTML;

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);

$tds = $xpath->query('//div/table/tr/td');
foreach ($tds as $cell) {
    echo "{$cell->textContent}\n";
}

Будет выводить:

foo
bar
hello
world
1 голос
/ 09 февраля 2011

Вы не должны использовать регулярные выражения для анализа HTML. Используйте взамен DOM и XPath . Вот пример:

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$nodes = $xpath->query('//td');
$result = array();
foreach ($nodes as $node) {
    $result[] = $node->nodeValue;
}
// $result holds the values of the tds
0 голосов
/ 09 февраля 2011

Только если у вас очень ограниченный, четко определенный HTML, вы можете ожидать его с помощью регулярных выражений. самый высокий рейтинг SO за все время решает эту проблему.

Он приходит ...

...