Задать вопрос
@Mishaermolaev

Почему регулярное выражение в цикле не находит совпадения, а отдельно находит?

Здравствуйте!
Пишу регулярку для получения цен из текстов:
function test_price_min(){

    $post = '
Текстиль
32-37/8
975₽
';

    $result_match = preg_match('/Цена\d{1,6}[рр₽][^aак]|Цена\d{1,6}[^aак]|[^-р]\d{1,6}[рр₽][^aак]|ц\d{1,6}[^в]/ui', $post, $matches_gross);

    if ($result_match == true) {

    echo '<pre>';
    print_r($matches_gross);
    echo '</pre><br>';

    }

    }

      test_price_min();


Часть текста с различными условиями в цикле находит без проблем, а с некоторыми проблема.
  • Вопрос задан
  • 219 просмотров
Подписаться 1 Средний 17 комментариев
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Stepik
    Язык программирования PHP
    1 неделя
    Далее
Пригласить эксперта
Ответы на вопрос 1
Indread
@Indread
Регулярное выражение может не находить совпадений в цикле, если используется флаг `g`, так как он изменяет позицию поиска между вызовами, что приводит к пропуску совпадений. В цикле важно либо использовать регулярное выражение без этого флага, либо сбрасывать позицию поиска вручную. Также проблемы могут возникать, если строка изменяется в процессе цикла или если неправильно обновляются индексы при выполнении поиска. Чтобы избежать таких ошибок, следует тщательно контролировать позицию поиска и логику цикла, а также убедиться, что регулярное выражение корректно настроено для многократных итераций.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы