2011-07-16 87 views
1

我試圖從天氣網絡拉天氣。這個代碼給了我,但它看起來很長,並返回數組中的兩個值(這就是爲什麼我需要返回$ output [1]而不是$ output [0]),當我只希望它返回一個。有任何想法嗎?有沒有更好的方法來寫這個正則表達式?

$url=file_get_contents("http://www.theweathernetwork.com/weather/cans0057?ref=homecity"); 

preg_match('/<div id="obs_conds" class="hslice">.*?<img.*?alt="(.*?)".*?<\/div>/s',$url,$output); 

print_r($output[1]); 
+3

不要正則表達式HTML - 解析它。 HTML不是常規的。 – zellio

+0

我該如何解析它? – bozdoz

+1

*(相關)* [最佳方法解析HTML](http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) – Gordon

回答

3

我覺得這很棒。也許你可以快捷從中

preg_match('/class="hslice">.*?<img.*?alt="(.*?)"/s',$url,$output); 
+0

謝謝!工作也是如此。 :)你知道爲什麼我在我的數組中得到兩個值,而不是一個? – bozdoz

+0

,因爲[0]總是「搜索」匹配值 – genesis

+0

好的。涼。謝謝 :) – bozdoz

0

相信preg_matches返回數組$輸出[1]和$輸出的第一要素全場比賽[1]相匹配的第一個捕獲的括號中的子模式的文本,等等(http://php.net/manual/en/function.preg-match.php)。關於正則表達式的優化,我猜你試圖把所有東西都放在<div id="obs_conds" class="hslice">之內,如果是這樣的話我會試着去做一個dom搜索。

另一方面也許最好的解決辦法是聯繫網站並設置一個web服務客戶端。在我看來,他們確實擁有這樣的基礎設施。

相關問題