0

次の PHP スクリプトを使用して、テーブルを解析します。

各要素が同じ行にある場合に機能します。次に例を示します。

<td></td>
<td></td>
<td></td>

「開始タグ」と「終了タグ」が異なる行にある場合、どのように機能させることができますか? そのようです:

<td></td>
<td>
</td>
<td></td>

PHP スクリプト:

function parseTable($html)
{
  // Find the table
  preg_match("/<table.*?>.*?<\/[\s]*table>/s", $html, $table_html);

  // Get title for each row
  preg_match_all("/<th.*?>(.*?)<\/[\s]*th>/", $table_html[0], $matches);
  $row_headers = $matches[1];

  // Iterate each row
  preg_match_all("/<tr.*?>(.*?)<\/[\s]*tr>/s", $table_html[0], $matches);

  $table = array();

  foreach($matches[1] as $row_html)
  {
    preg_match_all("/<td.*?>(.*?)<\/[\s]*td>/", $row_html, $td_matches);
    $row = array();
    for($i=0; $i<count($td_matches[1]); $i++)
    {
      $td = strip_tags(html_entity_decode($td_matches[1][$i]));
      $row[$row_headers[$i]] = $td;
    }

    if(count($row) > 0)
      $table[] = $row;
  }
  return $table;
}
4

1 に答える 1

2

Preg_match は、正規表現ではないため、HTML を解析するために作成されていません。最善の解決策は

XML パーサーを使用することです - PHP Doc

各ツールには解決すべき問題があり、解析は preg_match のものではありません

于 2012-12-13T01:49:39.100 に答える