Russian Qt Forum
Май 09, 2024, 17:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Парсинг QRegExp не работает  (Прочитано 3076 раз)
pavellyba
Гость
« : Июль 07, 2017, 16:10 »

Пытаюсь извлечь message_id из строки:

Код:
"message":{"message_id":2,"from":{"id":225345251,"first_name":"pavel","last_name":"lyba","language_code":"ru"},"chat":{"id":225345251,"first_name":"pavel","last_name":"lyba","type":"private"},"date":1499428096,"text":"\u0422\u0435\u0441\u0442"}},

Сам код:
Код:
QRegExp re("\"message_id\":([^>]+),");
    int lastPos = 0;
    while( ( lastPos = re.indexIn( text, lastPos ) ) != -1 )
    {
        lastPos += re.matchedLength();
        qDebug() << re.cap( 0 ) << ":" << re.cap( 1 );
    }

Что я делаю не так?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Июль 07, 2017, 20:50 »

1. А нафига "[^>]+"? Что это конструкция должна было сделать?
Попробуйте
Код
C++ (Qt)
QRegExp re("\"message_id\":([0-9]+),");
// кст, [0-9] заменяется на \d

2. Та строчка явно относится к json, поэтому лучше ее было разобрать парсером json, а не регуляркой
// но раз регулярка уже есть, и вытащить нужно только одно значение, то почему бы и нет?
Записан

titan83
Гость
« Ответ #2 : Июль 09, 2017, 17:50 »

Что я делаю не так?
Не используйте QRegExp, если в Qt5, то сразу переходите на QRegularExpression. Если же вы на Qt4, то сочувствую: будете страдать от ограничений. Мне в свое время пришлось организовать вызовы perl из своей программы на Qt4, что мои сложные регулярки работали.

The number of added features, when compared with QRegExp, is huge. A partial list is:

it supports lazy (non greedy) and possessive quantifiers;
it supports lookbehind assertions;
it supports Perl’s /s, /m, /x, /u regexp modifiers;
it properly supports Perl’s global matching
it supports named capturing groups;
it can properly handle non-BMP character ranges;
it supports soft and hard partial matching;
it supports subroutine calls/references
it supports comments;
it supports conditional patterns.
Most of these have been long-time nuisances with QRegExp. Now they’re gone.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.143 секунд. Запросов: 23.