2014-06-18 2 views
-1

그래서 내가하고 싶은 것은 preg_match_all을 사용하여 아래 테이블에서 번호를 가져 오는 것입니다. 몇 가지 정규 표현식으로 놀아 보려고했지만 아직 이해하지 못하고 있습니다. 숫자를 가져 와서 인쇄하고 싶습니다. 즉.curl과 preg_match_all을 사용하는 PHP

//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]); 

도움이 될 것입니다. 그러나

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

당신은 XML/HTML 구조에서 데이터를 가져 오는 때 당신이 파서를 사용하는 것이 더 낫다 :

<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> 
+0

무엇을 원하니? – ajtamwojtek

+0

방금 ​​업데이트했습니다. – user3727435

답변

1

나는 당신이하고있는 정규식 후 다음과 같이 보입니다 생각 :

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

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

내가 제안한 정규 표현식을 시도했지만, 아래에 표시된 내용을 반환했습니다 (몇 줄만 복사했습니다). 나는이 라인들 각각에 대해서만 숫자를 포착하고 싶다. 나는 또한 dom으로 얼얼하게 만들려고 노력했지만 많은 것을 배울 것도있다. 1 1 1 99 0 0 0 0 – user3727435

+0

'어레이 ([0] => 배열 ([0] => 1 [1] = 0 1 => 1 [1] => 1)) 'preg_match_all'이 리턴 할 것이기 때문에 실제 캡쳐 된 숫자는'$ matches [0]' – vimist

+0

에 들어있을 것입니다. 아래는 어떻게 PHP를 넣었는지입니다. 나는 무엇을 잘못 했는가? 아무것도 인쇄하지 않습니다. $ ch = curl_init(); curl_setopt ($ ch, CURLOPT_URL, 'http://192.168.1.40/dtm.html?address=N7:0'); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); $ response = curl_exec ($ ch); preg_match_all ('/ (\ d +?) /', $ response, $ matches2); print_r ($ matches2 [0]); – user3727435

관련 문제