使用正则表达式(preg_match)查找天气数据

时间:2011-11-06 04:28:45

标签: php regex

我正在尝试解析一些天气预报线,以防下雨和降温。以下是一个示例行:

$str = 'Mostly cloudy with a 50 percent chance of rain. Highs 45 
        to 50. Lows around 40.'

模式总是一样的。对于下雨,我只需要在“百分比”之前的数字。对于温度,我需要句子中的最后一个数字为“Highs”,然后是“Lows”。

到目前为止,我正在使用PHP执行以下操作:

//Chance of rain
preg_match('((\d+) (percent))', $str, $match);
$rain_percentage = str_replace(' percent', '', $match[0]);

//High temperature
$high_temp_line = spliti('highs', $str);
preg_match('((\d+)[.])', $high_temp_line[1], $match);
$high_temp = str_replace('.', '', $match[0]);

这是我能想到的最有效的方式来获得我需要的东西。还有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

如果它总是只是字符串中的那3个数字,只需使用preg_match将它们拉出字符串即可。 $ matches将是一个包含匹配数字的数组。

preg_match("/(\d+).*?(\d+).*?(\d+)/", $str, $matches)

答案 1 :(得分:0)

如果格式始终完全相同,这应该可以满足你的需要:

<?php
$str = 'Mostly cloudy with a 50 percent chance of rain. Highs 45 to 50. Lows around 40.';
$regex = '/(.*?) with a (\d*) percent chance of rain. Highs (\d*) to (\d*). Lows around (\d*)./';
$matches = array();
preg_match($regex, $str, $matches);

如果您希望将它们全部放在单个变量中而不是在数组中,只需添加以下行:

list($str, $situation, $rain_chance, $highs_high, $highs_low, $lows) = $matches;