【问题标题】:preg_match() find all values inside of table?preg_match() 查找表内的所有值?
【发布时间】:2011-02-09 15:23:18
【问题描述】:

大家好, curl 函数返回包含常规 html -> 两个 div 的字符串 $widget,其中第一个 div 包含一个表,其中包含 <td> 内的各种值。

我想知道什么是最简单和最好的方法来只提取<td> 中的所有值,所以我有空白值而没有剩余的 html。

知道 preg_match 的模式应该是什么样的吗?

谢谢。

【问题讨论】:

标签: php curl preg-match


【解决方案1】:

正则表达式不是一个合适的解决方案。您最好将其加载到 DOMDocument 并解析它。

【讨论】:

    【解决方案2】:

    您正在押注使用 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
    

    【讨论】:

      【解决方案3】:

      您不应该使用正则表达式来解析 HTML。请改用DOMXPath。这是一个例子:

      $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】:

        只有当您的 HTML 非常有限且定义明确时,您才能期望使用正则表达式对其进行解析。 highest ranked SO answer of all time 解决了这个问题。

        他来了……

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-28
          • 2023-04-10
          • 1970-01-01
          • 1970-01-01
          • 2014-12-25
          相关资源
          最近更新 更多