Мне нужно извлечь Длительность "бесконечной" строки - PullRequest
0 голосов
/ 31 марта 2020

У меня есть такая строка

aaa ~120 Sek. 53 Sek. ~~ bbb asdfasf aasdf asdfasdf ~600 Sek.~~ ccc ~60 Sek. 43 Sek. ~~ ddd ~240 Sek. 55 Sek. ~~

Я должен сложить все xxx Sek. (это всего лишь секунды).

Любая хорошая идея?

С уважением, Бруно

1 Ответ

3 голосов
/ 31 марта 2020

Один из способов сделать с regex взглядом в будущее, чтобы вы могли получить все цифры, за которыми следует слово Sek. Если вы хотите выполнить какую-либо фильтрацию для сопоставленного результата, такого как 3 цифры или что-то еще, вы можете использовать функцию strlen () .

$re = '/\d+(?= Sek)/';
$str = 'aaa ~120 Sek. 53 Sek. ~~ bbb asdfasf aasdf asdfasdf ~600 Sek. ~~ ccc ~60 Sek. 43 Sek. ~~ ddd ~240 Sek. 55 Sek. ~~';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
#print_r($matches);
$sum = 0;
foreach ($matches as $item) {
    $sum += $item[0];
}
echo $sum;

Редактировать: Рассчитать сумма альтернативно

$sum = array_reduce($matches, function(&$result, $item) {
    return $result + $item[0];
}, 0);

ИЛИ

$sum= array_sum(array_column($matches,0));

Рабочая демонстрация: https://3v4l.org/iQp0q

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...