За последние 24 часа нас посетили 22222 программиста и 1034 робота. Сейчас ищут 650 программистов ...

Занимательный случай. Помогите. Не работает peg_match_all

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

  1. sharunm

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

    С нами с:
    16 ноя 2014
    Сообщения:
    58
    Симпатии:
    0
    Приветствую,

    Картина следующая, пишу парсер постов с VK.COM. Статьи парсятся, всё хорошо. Мне нужно из поста выдернуть, например, цену

    Есть такая функция:

    Код (Text):
    1. function getpricefrompost($text) {
    2.             //$text='Цена:1250₽ Размеры:36/37/38/38/39/40/ Размервразмер Каждаяпаравкоробке Хорошегокачества Живоефото';
    3.          
    4.            
    5.             if(preg_match_all('/Цена:(.*?)₽ /sU', $text, $regs))
    6.             {
    7.                 return $regs[1][0];      
    8.             }
    9.             return $text;
    10.         }
    Я немного нахимичил. Объясняю. Если $text получаю непосредственно из поста, то данная функция выводит всю переменную $text, которая идентична той, что закоментирована в функции. Если раскоментирую $text в функции, выводит цену 1250 р. sU в выражении после слеша - это уже от отчаяния. Если их убрать, всё также работает. Переводил $text в UTF-8, ставил передней (string), присоединял к другой строке и прочие пляски с бубном. Не помогает. Тип входящей $text - string. Какая-то хрень.

    Есть гуру PHP, которые сталкивались с этим? ))
    --- Добавлено ---
    Главное, спросить. И поскольку я решил проблему самостоятельно, то в помощь другим подскажу. Нажал Ctrl + U, увидел, что моя строка в браузере на самом деле состоит из нескольких строк, что я сделал:
    Код (Text):
    1. function getpricefrompost($text) {
    2.             $out = str_replace(array("\r","\n")," ",$text);
    3.            
    4.             if(preg_match_all('/Цена:(.*?)₽ /sU', $out, $regs))
    5.             {
    6.                 return $regs[1][0];      
    7.             }
    8.             return $out;
    9.         }