2016-03-26 168 views
-1

OK,我想從一個網站(匯率)的表讀 我想從以下幾行讀了一些數據:正則表達式,預浸比賽

<table width="100%" border="0" 

我得到的上述線路副本通過以下幾行我可以從我放置該表副本的地址讀取我想要的數據。

$content = file_get_contents("http://www.example.com/"); 

preg_match('#">([0-9,.]*)<.*">([0-9,.]*)<#Uis', $content, $USDmatch); 
preg_match('#">([0-9,.]*)<.*">([0-9,.]*)<#Uis', $content, $EURmatch); 
preg_match('#">([0-9,.]*)<.*">([0-9,.]*)<#Uis', $content, $GBPmatch); 

$eur = $EURmatch[2]; 
$usd = $USDmatch[2]; 
$gbp = $GBPmatch[2]; 

echo "EUR: $eur USD: $usd GBP: $gbp"; 

但是,使用相同的行,我無法從源代碼讀取表! 能否請你指教我找到我的錯誤?

謝謝

+1

在PHP中,您可以使用DOMDocument輕鬆提取節點值。 –

+0

歡迎來到SO!你的問題具體是什麼?這個問題具體是什麼? – J0e3gan

+0

我剛剛編輯帖子並提供更多信息。謝謝 –

回答

0

從更多的交流結果可以看出,冗餘規範的一些細節導致了不匹配。

托盤下面的更換。它將工作:

preg_match('#MonetaryCode">USD.*MonetaryBuy">([0-9,.]*)<.*MonetarySell">([0-9,.]*)<#Uis', $content, $USDmatch); 
preg_match('#MonetaryCode">EUR.*MonetaryBuy">([0-9,.]*)<.*MonetarySell">([0-9,.]*)<#Uis', $content, $EURmatch); 
preg_match('#MonetaryCode">GBP.*MonetaryBuy">([0-9,.]*)<.*MonetarySell">([0-9,.]*)<#Uis', $content, $GBPmatch); 

$eur = $EURmatch[2]; 
$usd = $USDmatch[2]; 
$gbp = $GBPmatch[2]; 

我只是縮短了正則表達式,並消除了不必要的分組。關於貪婪和換行符的言論都被誤導了。你已經有了我在長長的rexep模式字符串中忽略的適當的修飾符。對困惑感到抱歉。

+0

請注意,'[^。]'不匹配一個點。 –

+0

如果不是字符類的引用,那麼它是matchin _anything但是dot_,包括行尾字符。無論如何,因爲它沒有在第一個花邊的解釋。 – rpy

+0

我提供了更多的解釋,可以請你指教我嗎?請簡單清楚地告訴我。謝謝 –