Использование регулярного выражения (preg_match) для поиска данных о погоде

#php #regex

#php #регулярное выражение

Вопрос:

Я пытаюсь проанализировать некоторые строки прогноза погоды на предмет вероятности дождя и температуры. Вот пример строки:

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

Шаблон всегда один и тот же. Для дождя мне просто нужно число перед словом «процент». Для температуры мне нужно последнее число в предложении для «максимумов», а затем «Минимумов».

Пока я делаю следующее, используя 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]);
  

Так что это самый эффективный способ, который я могу придумать, чтобы получить то, что мне нужно. Есть ли способ лучше?

Комментарии:

1. ЛОЛ, да, это помогло бы, да? Просто интересно, есть ли более эффективный способ получения этой статистики.

Ответ №1:

Это должно сделать то, что вам нужно, при условии, что формат всегда точно такой же:

 <?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;
  

Ответ №2:

Если в строке всегда только эти 3 числа, просто используйте preg_match, чтобы извлечь их из строки. $matches будет массивом, содержащим совпадающие числа.

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

Комментарии:

1. Извините, я был недостаточно конкретен. Однако спасибо за быстрый ответ! Ваше решение сработало бы, но я имел в виду, что шаблон был больше, чем в первых двух предложениях, будет либо вероятность дождя, либо условия ветра. Тогда следующие предложения будут о температуре. Я имел в виду шаблон, в котором в предложении о дожде всегда будет слово «процент», а в предложениях о температуре всегда будет указано «Высокий» или «Низкий».