我正在尝试解析一些天气预报线,以防下雨和降温。以下是一个示例行:
$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]);
这是我能想到的最有效的方式来获得我需要的东西。还有更好的方法吗?
答案 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;