php使用curl和preg_match_all [英] php using curl and preg_match_all

查看:90
本文介绍了php使用curl和preg_match_all的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我想要做的是使用preg_match_all从下面的表中拉出数字。我试着玩几个正则表达式,但我还没有得到它。我想拉数字并打印。即。

  //获取网站
$ ch = curl_init
curl_setopt($ ch,CURLOPT_URL,'http://site.org');
curl_setopt($ ch,CURLOPT_RETURNTRANSFER,1);
$ response = curl_exec($ ch);

//解析数据
preg_match_all('/ [0-9] +(?= [^ 0-9] +(N7:0< | N7:10< | N7: 20))/',$ response,$ matches);

//打印解析的数据
print_r($ matches [0]);

任何帮助将是巨大的。

 < html>< head>< title> Monitor< / title>< / head> 
< body bgcolor =#ffffff>< center>
< h2>< font face =helvetica>以太网处理器< / font>< / h2>
< h2>< i>数据表监视器< / i>< / h2>
< hr width = 25%align = center>
< meta HTTP-EQUIV =refreshCONTENT =15>< body bgcolor =#ffffff>< center>< table border = 1>< tr> align = left>地址< / th>< th width = 50> 0< / th>< th width = 50> 1< th width = 50&第一宽度= 50×第三宽度= 50×5第三宽度= 50×5第三宽度= 50×5第三宽度= 50×5第三宽度=第一和第二输出信号的第一和第二输出信号分别是第一和第二输入信号的第一和第二输出信号。
< 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>< tr>< td> N7:20< / 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>
< td align = right> 0< / td>
< td align = right> 0< / td>
< td align = right> 0< / td>
< td align = right> 0< / td>
< / tr>< tr>< td> N7:30< / td>
< td align = right> 16993< / td>
< td align = right> 29251< / td>
< td align = right> 28516< / td>
< td align = right> 25888< / td>
< td align = right> 20079< / td>
< td align = right> 2972​​8< / td>
< td align = right> 18031< / td>
< td align = right> 30062< / td>
< td align = right> 25633< / td>
< td align = right> 0< / td>
< / tr>< tr>< td> N7:40< / 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>
< td align = right> 0< / td>
< td align = right> 0< / td>
< td align = right> 0< / td>
< td align = right> 0< / td>
< / tr>< tr>< td> N7:50< / td>
< td align = right> 205< / td>
< td align = right> 158< / td>
< td align = right> 152< / td>
< td align = right> 0< / td>
< td align = right> 0< / td>
< td align = right> 79< / td>
< td align = right> 7< / td>
< td align = right> 19< / td>
< td align = right> 0< / td>
< td align = right> 0< / td>
< / tr>< tr>< td> N7:60< / td>
< td align = right> 0< / td>
< td align = right> 4000< / td>
< td align = right> 18000< / td>
< td align = right> 2500< / td>
< td align = right> 1750< / td>
< td align = right> 2000< / 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:70< / td>
< td align = right> 0< / td>
< td align = right> 0< / td>
< td align = right> 14< / td>
< td align = right> 0< / td>
< td align = right> 2210< / 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:80< / td>
< td align = right> 363< / td>
< td align = right> 347< / td>
< td align = right> 361< / td>
< td align = right> 0< / td>
< td align = right> 371< / td>
< td align = right> 379< / 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:90< / td>
< td align = right> 6< / td>
< td align = right> 474< / td>
< td align = right> 42< / td>
< td align = right> 114< / td>
< td align = right> 408< / td>
< td align = right> 0< / td>
< td align = right> 0< / td>
< td align = right> 0< / td>
< td align = right> 308< / td>
< td align = right> 248< / td>
< / tr>< / table>< / center>< hr width = 25%align = center>


解决方案

我认为正则表达式看起来像这个:



< td align = right>(\d +?)< / td> p>

但是,当你从XML / HTML结构中获取数据时,最好使用解析器:

  $ dd = new DOMDocument(); 
$ dd-> loadHTML($ response);
$ tds = $ dd-> getElementsByTagName('td');

foreach($ tds as $ td){
if(is_numeric($ td-> nodeValue))
echo $ td-> nodeValue。'< br / >';
}


So what I'm wanting to do is use preg_match_all to pull the number from the table below. I've tried playing around with a few regular expressions, but I'm not getting it yet. I would like to pull the numbers and print them. ie.

//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('/[0-9]+(?=[^0-9]+(N7:0<|N7:10<|N7:20))/', $response, $matches);

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

Any help would be great.

<html><head><title>Monitor</title></head>
<body bgcolor="#ffffff"><center>
<h2><font face="helvetica">Ethernet Processor</font></h2>
<h2><i>Data Table Monitor</i></h2>
<hr width=25% align=center>
<meta HTTP-EQUIV="refresh" CONTENT="15"><body bgcolor="#ffffff"><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><tr><td>N7:20</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>
<td align=right>0</td>
<td align=right>0</td>
<td align=right>0</td>
<td align=right>0</td>
</tr><tr><td>N7:30</td>
<td align=right>16993</td>
<td align=right>29251</td>
<td align=right>28516</td>
<td align=right>25888</td>
<td align=right>20079</td>
<td align=right>29728</td>
<td align=right>18031</td>
<td align=right>30062</td>
<td align=right>25633</td>
<td align=right>0</td>
</tr><tr><td>N7:40</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>
<td align=right>0</td>
<td align=right>0</td>
<td align=right>0</td>
<td align=right>0</td>
</tr><tr><td>N7:50</td>
<td align=right>205</td>
<td align=right>158</td>
<td align=right>152</td>
<td align=right>0</td>
<td align=right>0</td>
<td align=right>79</td>
<td align=right>7</td>
<td align=right>19</td>
<td align=right>0</td>
<td align=right>0</td>
</tr><tr><td>N7:60</td>
<td align=right>0</td>
<td align=right>4000</td>
<td align=right>18000</td>
<td align=right>2500</td>
<td align=right>1750</td>
<td align=right>2000</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:70</td>
<td align=right>0</td>
<td align=right>0</td>
<td align=right>14</td>
<td align=right>0</td>
<td align=right>2210</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:80</td>
<td align=right>363</td>
<td align=right>347</td>
<td align=right>361</td>
<td align=right>0</td>
<td align=right>371</td>
<td align=right>379</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:90</td>
<td align=right>6</td>
<td align=right>474</td>
<td align=right>42</td>
<td align=right>114</td>
<td align=right>408</td>
<td align=right>0</td>
<td align=right>0</td>
<td align=right>0</td>
<td align=right>308</td>
<td align=right>248</td>
</tr></table></center><hr width=25% align=center>

解决方案

I think the regex you're after looks something like this:

<td align=right>(\d+?)</td>

However when you're getting data from an XML/HTML structure you're better off using a parser:

$dd = new DOMDocument();                                                                                                                                                                                   
$dd->loadHTML($response);                                                                                                                                                                                      
$tds = $dd->getElementsByTagName('td');                                                                                                                                                                    

foreach($tds as $td) {                                                                                                                                                                                     
    if(is_numeric($td->nodeValue))                                                                                                                                                                         
        echo $td->nodeValue.'<br />';                                                                                                                                                                      
} 

这篇关于php使用curl和preg_match_all的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆