@aaanet

Как найти все значения между символами?

Здравствуйте!

Есть строка "СЧЕТУ 555 ОТ 01.01.2019, счету 556 ОТ 01.01.2019";
Как с помощью preg_match_all найти номера счетов? (555, 556)
И потом вывести через запятую.

Спасибо!
  • Вопрос задан
  • 133 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега Регулярные выражения
preg_match_all('/(?<=счету )\d+/iu', $str, $matches);
echo implode(', ', $matches[0]);

UPD.

А если строка СЧЕТУ 555 ОТ 01.01.2019, 556 ОТ 01.01.2019
т.е. второй раз слова "счету" нет?

preg_match_all('/\d+(?= от \d{2}\.\d{2}\.\d{4})/iu', $str, $matches);
Ответ написан
Комментировать
bitniks
@bitniks
Go/PHP/Symfony developer
$text = 'СЧЕТУ 555 ОТ 01.01.2019, счету 556 ОТ 01.01.2019';
preg_match_all('/счету\s(\d+)\s/ui', $text, $matches);

print(implode(', ', $matches[1]));

sandbox.onlinephpfunctions.com/code/6c48bdc9eac4ae...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
coderisimo
@coderisimo
решение в две строчки :

//d{3,6} -  здесь указываешь  от скольки до скольки цифр бывает в номере счета.
        preg_match_all('/\s(\d{3,6})\s/', 'СЧЕТУ 555 ОТ 01.01.2019, счету 556 ОТ 01.01.2019"', $matches);
       $matches = $matches ? implode(',' , $matches[1]) : '';
        print_r($matches);


А вот тут можно поиграться :
песочница с кодом
Ответ написан
Комментировать
@IS-Builder
~ PHP-8 & REGEXP - This is a really powerful kit ~
А если строка СЧЕТУ 555 ОТ 01.01.2019, 556 ОТ 01.01.2019
т.е. второй раз слова "счету" нет?
$str = 'СЧЕТУ 555 ОТ 01.01.2019, 556 ОТ 01.01.2019';
preg_match_all('~(?:счету|,)\h\K\d+~iu', $str, $arr);

echo join(', ', $arr[0]);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы