Задать вопрос
@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 комментариев
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
Indread
@Indread
Регулярное выражение может не находить совпадений в цикле, если используется флаг `g`, так как он изменяет позицию поиска между вызовами, что приводит к пропуску совпадений. В цикле важно либо использовать регулярное выражение без этого флага, либо сбрасывать позицию поиска вручную. Также проблемы могут возникать, если строка изменяется в процессе цикла или если неправильно обновляются индексы при выполнении поиска. Чтобы избежать таких ошибок, следует тщательно контролировать позицию поиска и логику цикла, а также убедиться, что регулярное выражение корректно настроено для многократных итераций.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽