Убрать ненужные данные из строки, если содержащиеся числа могут отличаться

У меня есть строки, которые могут содержать такие данные, как:

  • PMC от 1 до 2 дней
  • ПТГ от 10 до 15 дней
  • ПТГ от 3 до 7 дней
  • Пукатор от 1 до 3 дней

Мне нужно раздеть это так, чтобы мне просто оставили числа, хранящиеся в виде двух отдельных переменных, которые я могу использовать в качестве целых чисел для расчета наибольшего времени доставки в другом разделе кода. Я предполагаю, что мне нужно использовать substr, но я не знаю, можно ли / как его использовать, если вы не знаете, какое значение вы хотите удалить. Нужно ли делать отдельную строку для каждого возможного первого и второго номера? И можно ли использовать substr для извлечения первого и второго одновременно или мне нужно будет обработать его дважды?

1 ответ

Решение

Вы можете сделать это легко с помощью регулярных выражений и PHP preg_match_all() функция:

$str = "PTG 10 to 15 days";
preg_match_all('/\d+/', $str, $matches);
print_r( $matches[0] );
// => Array
//    (
//        [0] => 10
//        [1] => 15
//    )

Если вы хотите получить их как отдельные переменные, list() твой друг:

list($first_num, $second_num) = $matches[0];
echo $first_num;  // => 10
echo $second_num; // => 15

Поскольку вы новичок в регулярных выражениях, я рекомендую прочитать почтенное руководство Regular-Expressions.info. В этом случае мы использовали регулярное выражение /\d+/, который просто говорит, чтобы соответствовать всем последовательностям из одной или нескольких цифр. \d означает "цифра" и + означает "один или несколько" из всего, что предшествует этому.

Другие вопросы по тегам