【问题标题】:Select all TD between all TR HTML tag with RegEx in PHP在 PHP 中使用 RegEx 选择所有 TR HTML 标记之间的所有 TD
【发布时间】:2016-06-16 10:38:50
【问题描述】:

我想在以下代码的单独的 TR 数组中提取所有 TD 标记

<TR>
<TD class="table_border_both"><B>Person 1</B></TD>
<TD class="table_border_both"><B>Start, 10</B></TD>
<TD class="table_border_both"><B>End  , 5</B></TD>
<TD class="table_border_both"><b>14
</b></TD>
</TR>
<TR>
<TD class="table_border_both"><B>Person 2</B></TD>
<TD class="table_border_both"><B>Start, 10</B></TD>
<TD class="table_border_both"><B>End  , 5</B></TD>
<TD class="table_border_both"><b>14
</b></TD>

我尝试了这个正则表达式如下

preg_match_all("/([<tr>|\\n]+(<td class=\"table_border_both\"><b>(.*?)<\\/b><\\/td>))/is", $str, $matches);

但我想在 saprate 数组中的所有 TR 如下

[0]=>
array(4) {
[0]=>string(12) "Person 1"
[1]=>string(19) "Start, 10"
[2]=>string(12) "End  , 5"
[3]=>string(7) "14
}
[1]=>
array(4) {
[0]=>string(12) "Person 2"
[1]=>string(19) "Start, 10"
[2]=>string(12) "End  , 5"
[3]=>string(7) "14
}

【问题讨论】:

    标签: php regex parsing html-table


    【解决方案1】:

    don't attempt to parse HTML with regular expressions。这不是适合这项工作的工具。

    为此,PHP 有一个DOM extension。然后,您可以使用简单的 XPath 查询来提取您需要的元素。

    甚至有一些库可以让这更容易(列表并不详尽):

    【讨论】:

      【解决方案2】:

      我 - 喜欢你 - 用 RegExes 做讨厌的事情。但是现在我不确定你是认真地在 DOM 上使用正则表达式还是只是在开玩笑,但作为社区预言的一部分,我想向你介绍DOMDocument 及其兄弟DOMXPath

      $document = new DOMDocument;
      $document->loadHTML($html);
      $xpath = new DOMXPath($document);
      $trs = $xpath->query('//tr');
      $array = [];
      foreach ($trs as $key => $tr) {
          $td = $xpath->query('td', $tr);
          foreach ($td as $value) {
              $array[$key][] = $value->nodeValue;
          }
      }
      print_r($array);
      

      输出

      Array
      (
          [0] => Array
              (
                  [0] => Person 1
                  [1] => Start, 10
                  [2] => End  , 5
                  [3] => 14
      
              )
      
          [1] => Array
              (
                  [0] => Person 2
                  [1] => Start, 10
                  [2] => End  , 5
                  [3] => 14
      
              )
      
      )
      

      $html 是你的 HTML 源代码

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-16
        • 2013-05-08
        • 2015-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多