Russian Qt Forum

Qt => Вопросы новичков => Тема начата: pavellyba от Июль 07, 2017, 16:10



Название: Парсинг QRegExp не работает
Отправлено: 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 );
    }

Что я делаю не так?


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

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


Название: Re: Парсинг QRegExp не работает
Отправлено: titan83 от Июль 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.