За последние 24 часа нас посетили 22536 программистов и 1004 робота. Сейчас ищут 726 программистов ...

Регулярка правильная, но preg_match_all не работает

Тема в разделе "Регулярные выражения", создана пользователем sharunm, 29 авг 2019.

Метки:
  1. sharunm

    sharunm Активный пользователь

    С нами с:
    16 ноя 2014
    Сообщения:
    58
    Симпатии:
    0
    Здравствуйте, коллеги,
    Вот такая незадача:

    PHP:
    1. $return = array();
    2. $text = ' Новинка Потрясающие платья Большие Размеры 50 52 54 56 58 60 Цена 600р В наличии на 24-118 и 22-106 БРЕНД By Raheem У нас ткань этой модели точь в точь как на фото и цвета #Параметрыплатье3яруса: Ткань Лакоста тянется, очень хорошое качество ткани на Лето дышащий Качество пошив очень хороший Размер в размер идут Платье тропеция свободного кроя Обхват груди: 50 размер - 102см 52 размер - 106см 54 размер - 110см 56 размер - 114см 58 размер - 118см 60 размер - 122см Длина платье: 50 размер - 103см 52 размер - 103см 54 размер - 105см 56 размер - 105см 58 размер - 106см 60 размер - 106см';
    3. if(preg_match_all('/[Цц][Ее][Нн][Аа][ |:|-|=|—]([0-9]+)[A-Z|a-z|А-Я|а-я| |₽]/', $text, $return))
    4. {
    5.     print_r($return);  
    6. }
    Выдает:
    Код (Text):
    1. Array ( [0] => Array ( ) [1] => Array ( ) )
    Тестирую регулярку на https://regex101.com/

    Результат:
    Код (Text):
    1. Match 1
    2. Full match    87-97    Цена 600р
    3. Group 1.    92-95    600
    Подскажите, пожалуйста, решение. Может, кто-то сталкивался с подобным. Спасибо.
     
  2. sharunm

    sharunm Активный пользователь

    С нами с:
    16 ноя 2014
    Сообщения:
    58
    Симпатии:
    0
    Вопрос решился, надо поставить после регулярки флаг u:
    PHP:
    1. $return = array();
    2. $text = ' Новинка Потрясающие платья Большие Размеры 50 52 54 56 58 60 Цена 600р В наличии на 24-118 и 22-106 БРЕНД By Raheem У нас ткань этой модели точь в точь как на фото и цвета #Параметрыплатье3яруса: Ткань Лакоста тянется, очень хорошое качество ткани на Лето дышащий Качество пошив очень хороший Размер в размер идут Платье тропеция свободного кроя Обхват груди: 50 размер - 102см 52 размер - 106см 54 размер - 110см 56 размер - 114см 58 размер - 118см 60 размер - 122см Длина платье: 50 размер - 103см 52 размер - 103см 54 размер - 105см 56 размер - 105см 58 размер - 106см 60 размер - 106см';
    3. if(preg_match_all('/[Цц][Ее][Нн][Аа][ |:|-|=|—]([0-9]+)[A-Z|a-z|А-Я|а-я| |₽]/u', $text, $return))
    4. {
    5.     print_r($return);
    6. }
    Но многострочный текст не парсит, хоть и ставлю флаг m....
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.321
    Адрес:
    Лень
    Ложкой бы по лбу за потраченное время на тебя, а проблему с итогом так и не озвучил.
     
  4. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    PHP:
    1. $text = ' Новинка Потрясающие платья Большие Размеры 50 52 54 56
    2. 58 60 Цена 600р В наличии на 24-118 и 22-106 БРЕНД By Raheem У нас ткань
    3. этой модели точь в точь как на фото и цвета #Параметрыплатье3яруса: Ткань Лакоста тянется,
    4. очень хорошое качество ткани на Лето дышащий Качество пошив очень хороший Размер в размер идут
    5. Платье тропеция Цена 100$ свободного кроя Обхват груди: 50 размер - 102см 52 размер - 106см 54 размер - 110см 56
    6. размер - 114см 58 размер - 118см 60 размер - 122см Длина платье: 50 размер - 103см
    7. 52 размер - 103см 54 размер - 105см 56 размер - 105см 58 размер - 106см 60 размер - 106см';
    8.  
    9.  
    10. if(preg_match_all('/Цена[ :-=—](\d+)\D/ui', $text, $return))    print_r($return);
    --- Добавлено ---
    m - изменяется поведение ^ и $. Зачем это вам?
     
  5. Павел Голубцов

    Павел Голубцов Активный пользователь

    С нами с:
    4 мар 2019
    Сообщения:
    183
    Симпатии:
    4
    Дело не в флаге m, а в том что нет в выражении начала и конца строки ^ $
     
  6. sharunm

    sharunm Активный пользователь

    С нами с:
    16 ноя 2014
    Сообщения:
    58
    Симпатии:
    0
    Спасибо. Не проверял, т.к. убрал переносы. Но проверю. Я только начинаю в это въезжать. Можно сказать, первая осознанная регулярка (а не набор копипастов методом тыка) ))