有没有更好的方法来编写这个正则表达式?

时间:2011-07-16 19:22:45

标签: php regex preg-match

我正试图从天气网络中拉出天气。这段代码给了我,但它看起来很长,并且在数组中返回两个值(这就是为什么我需要返回$ 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]);

2 个答案:

答案 0 :(得分:3)

我认为这很棒。也许你可以从它做出快捷方式

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

答案 1 :(得分:0)

我相信preg_matches在数组$ output [1]的第一个元素中返回整个匹配,而$ output [1]返回与第一个捕获的带括号的子模式匹配的文本,依此类推(http://php.net /manual/en/function.preg-match.php)。关于正则表达式优化,我猜你试图将所有内容都拉到<div id="obs_conds" class="hslice">内,如果是这种情况,我会尝试进行dom搜索。

另一方面,最好的解决方案可能是联系该站点并设置一个Web服务客户端。在我看来,他们确实有这种基础设施。