@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'] - сто процентов не пустая и выводится на экран
  • Вопрос задан
  • 153 просмотра
Пригласить эксперта
Ответы на вопрос 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);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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