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

Почему не работает preg_match_all в php?

Сама регулярка рабочая и находит все вхождения, вот https://regex101.com/r/m78Sgd/1/
Но в php массив возвращается пустой? Почему так и как сделать что бы работало?
preg_match_all("/(\d{1,2}\S\d{3})/m", $row['toys'], $prices);
print $prices; //пусто
print $prices[0];//пусто
print $prices[0][0];//пусто

$row['toys'] - сто процентов не пустая и выводится на экран
  • Вопрос задан
  • 165 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
@dodo512
Там в качестве разделителя тысяч используется thin space (U+2009).
В кодировке UTF-8 это последовательность из трёх байт 0xE2 0x80 0x89.
Для нормальной работы \s c различными пробельными символами Юникода нужен модификатор /u.
preg_match_all("/(\d{1,2}\s\d{3})/u", $row['toys'], $prices);
Ответ написан
Комментировать
@grisha2217
В тексте какой-то специфичный пробел, который не ищет паттерн \S. Я просто выделил этот пробел из текста и вставил в регулярку. Заработало. "m" в конце регулярки - лишнее.

preg_match_all('/\d+? \d+/', $row['toys'], $prices);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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