preg_match() find all values inside of table?

泪湿孤枕 提交于 2019-12-11 04:35:47

问题


hey guys, a curl function returns a string $widget that contains regular html -> two divs where the first div holds a table with various values inside of <td>'s.

i wonder what's the easiest and best way for me to extract only all the values inside of the <td>'s so i have blank values without the remaining html.

any idea what the pattern for the preg_match should look like?

thank you.


回答1:


You're betting off using a DOM parser for that task:

$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";
}

Would output:

foo
bar
hello
world



回答2:


Regex is not a suitable solution. You're better off loading it up in a DOMDocument and parsing it.




回答3:


You shouldn't use regexps to parse HTML. Use DOM and XPath instead. Here's an example:

$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



回答4:


Only if you have very limited, well-defined HTML can you expect to parse it with regular expressions. The highest ranked SO answer of all time addresses this issue.

He comes ...



来源:https://stackoverflow.com/questions/4946850/preg-match-find-all-values-inside-of-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!