繁体   English   中英

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

[英]Is there a better way to write this regex?

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

我认为这很棒。 也许你可以从中制作捷径

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM