1

最新のPHPを使用しています。HTMLページを解析してデータを取得したい。

HTML:

<table class="margin15" style="margin-left: 0pt; margin-right: 0pt;" width="100%" align="left" border="0" cellpadding="0" cellspacing="0">
TRs, TDs, Data
</table>

<table class="margin15" style="margin-left: 0pt; margin-right: 0pt;" width="100%" align="left" border="0" cellpadding="0" cellspacing="0">
TRs, TDs, Data
</table>

<table class="margin15" style="margin-left: 0pt; margin-right: 0pt;" width="100%" align="left" border="0" cellpadding="0" cellspacing="0">
TRs, TDs, Data
</table>

<table class="margin15" style="margin-left: 0pt; margin-right: 0pt;" width="100%" align="left" border="0" cellpadding="0" cellspacing="0">
TRs, TDs, Data
</table>

PHP コード:

<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.test.com/mypage.html');  
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);


$pattern = '/<table class="margin15" style="margin-left: 0pt; margin-right: 0pt;" width="100%" align="left" border="1" cellpadding="0" cellspacing="0">[^~]</table>/';
preg_match_all($pattern, $result, $matches);
print_r($matches);

?>

すべてのテーブルを取得できません。単純な$pattern='/table/';を使用する場合 、正確な結果が得られます。1 つの配列の場所でテーブル全体を取得するパターンを作成する方法は?

4

4 に答える 4

6

HTML は正規表現ではないため、正規表現を使用して HTML を解析するのは面倒です。 Simple HTML DOMを使用することをお勧めします。

于 2009-12-14T17:01:37.747 に答える
3

[X]HTML を regexで解析することはできませんが、試すことはできます:

$pattern = '#<table(?:.*?)>(.*?)</table>#';

ネストされたテーブルがある場合、これは機能しません。

于 2009-12-14T17:03:29.243 に答える
2

この回答をご覧ください。PHP で HTML パーサーを使用する方法について説明します。これは、あなたがやりたいことです。

于 2009-12-14T17:04:30.470 に答える
1

または、php が提供する DOM クラスを使用するだけです。シンプルなHTML DOMと同じことができると思いますが、はるかに高速です(誤解しないでください。シンプルなHTML DOMが本当に好きですが、数十行のファイルでは遅いです)

于 2009-12-14T17:03:14.000 に答える