php使用curl和preg_match_all

时间:2014-06-19 16:55:20

标签: php curl preg-match-all

我觉得我错过了什么。我使用以下代码从表中提取一些数字。就像它看起来一样简单,我似乎无法打印任何东西。我正在下载我的代码和下表的示例。请帮我找到我的错误。我希望它只打印每个单元格中的数字。

//gets the site
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://site.org');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch); 

//parse the data
preg_match_all('/<td align=right>(\d+?)</td>/', $response, $matches2);

//prints the parsed data
print_r($matches2[0]);

以下是该表的示例。

<center><table border=1><tr><th align=left>Address</th><th width=50>0</th><th width=50>1</th><th width=50>2</th><th width=50>3</th><th width=50>4</th><th width=50>5</th><th width=50>6</th><th width=50>7</th><th width=50>8</th><th width=50>9</th></tr><tr><td>N7:0</td>
<td align=right>1</td>
<td align=right>1</td>
<td align=right>1</td>
<td align=right>99</td>
<td align=right>0</td>
<td align=right>0</td>
<td align=right>0</td>
<td align=right>0</td>
<td align=right>0</td>
<td align=right>0</td>
</tr><tr><td>N7:10</td>
<td align=right>0</td>
<td align=right>7300</td>
<td align=right>16400</td>
<td align=right>3300</td>
<td align=right>2200</td>
<td align=right>6100</td>
<td align=right>28000</td>
<td align=right>18000</td>
<td align=right>0</td>
<td align=right>0</td>
</tr></table></center><hr width=25% align=center>

2 个答案:

答案 0 :(得分:1)

PHP-Error-Reporting应该给你一个提示。 我强烈建议将error_reporting设置为E_ALL,将display_errors设置为&#34; on&#34;在开发过程中。这会给你一个暗示,为什么你没有得到任何结果:

PHP Warning:  preg_match_all(): Unknown modifier 't'

所以你应该在正则表达式中的斜杠上添加一个转义符,因为你将它用作分隔符。

preg_match_all('/<td align=right>(\d+?)<\/td>/', $response, $matches2);

与往常一样,我建议使用另一个分隔符,从而使您的正则表达式更具可读性。我通常会选择&#34;〜&#34;。这看起来像是:

    preg_match_all('~<td align=right>(\d+?)</td>~', $response, $matches2);

答案 1 :(得分:0)

试试这个:

preg_match_all('/<td align=right>(\d+?(\.\d+)?)<\/td>/', $response, $matches2);

print_r($matches2[1]);

请注意,关闭TD标记中的正斜杠现在已转义。