使用PHP从HTML中提取值

时间:2013-07-17 03:40:07

标签: php regex

我正在使用cURL检索HTML页面。 html页面有一个这样的表。

<table class="table2" style="width:85%; text-align:center">
<tr>
<th>Refference ID</th>
<th>Transaction No</th>
<th>Type</th>
<th>Operator</th>
<th>Amount</th>
<th>Slot</th>
</tr>
<tr>
<td>130717919020ffqClE0nRaspoB</td>
<td>8801458920369</td>
<td>Purchase</td>
<td>Visa</td>
<td>50</td>
<td>20130717091902413</td>
</tr>
</table>

这是该HTML页面中唯一的表格。我需要提取Refference ID&amp;使用PHP插槽。

但不知道如何做到这一点。

修改one对我帮助很大。

2 个答案:

答案 0 :(得分:1)

基于正则表达式的解决方案(如已接受的答案) 是从HTML文档中提取信息的正确方法。

使用基于DOMDocument的解决方案代替:

$str = '<table class="table2" style="width:85%; text-align:center">
<tr>
<th>Refference ID</th>
  ...
<th>Slot</th>
</tr>
<tr>
<td>130717919020ffqClE0nRaspoB</td>
  ...
<td>20130717091902413</td>
</tr>
</table>';

// Create a document out of the string. Initialize XPath
$doc = new DOMDocument();
$doc->loadHTML($str);
$selector = new DOMXPath($doc);

// Query the values in a stable and easy to maintain way using XPath
$refResult = $selector->query('//table[@class="table2"]/tr[2]/td[1]');
$slotResult = $selector->query('//table[@class="table2"]/tr[2]/td[6]');

// Check if the data was found
if($refResult->length !== 1 || $slotResult->length !== 1) {
   die("Data is corrupted");
}

// XPath->query always returns a node set, even if 
// this contains only a single value.
$refId = $refResult->item(0)->nodeValue;
$slot = $slotResult->item(0)->nodeValue;

echo "RefId: $refId, Slot: $slot", PHP_EOL;

答案 1 :(得分:0)

$str = '<table class="table2" style="width:85%; text-align:center">
<tr>
<th>Refference ID</th>
<th>Transaction No</th>
<th>Type</th>
<th>Operator</th>
<th>Amount</th>
<th>Slot</th>
</tr>
<tr>
<td>130717919020ffqClE0nRaspoB</td>
<td>8801458920369</td>
<td>Purchase</td>
<td>Visa</td>
<td>50</td>
<td>20130717091902413</td>
</tr>
</table>';

preg_match_all('/<td>([^<]*)<\/td>/', $str, $m);

$reference_id = $m[1][0];
$slot = $m[1][5];