2011-07-16 14 views
1

私は気象ネットワークから天気を引き出そうとしています。このコードはそれを私に与えてくれますが、かなり長く見えて、配列内に2つの値を返します。そのため、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

ありがとう!ちょうど同様に動作します。 :)なぜ私は私の配列に2つの値を得ているのか分からないのですか? – bozdoz

+0

[0]は常に一致した値の一致を持っています – genesis

+0

Ok。クール。ありがとう:) – bozdoz

0

私はpreg_matchesは、配列$出力[1]と$出力の最初の要素にマッチ全体を返すと考えている[1]最初のキャプチャ括弧付きのサブパターンにマッチしたテキスト、 (http://php.net/manual/en/function.preg-match.php)。正規表現の最適化に関しては、<div id="obs_conds" class="hslice">のすべてを取り込もうとしていると思います。その場合は、代わりにdom検索を実行しようとします。

一方、最も良い解決策は、サイトに連絡してWebサービスクライアントを設定することです。彼らにはそのためのインフラストラクチャーがあるように思えます。

関連する問題