Как извлечь строки объекта Json, разделенные по определенному шаблону?

Таким образом, вопрос довольно прост. После нескольких часов просмотра тем о регулярных выражениях я все еще не могу найти ту, которая будет обрабатывать строку, как указано в разделе кода.

Вот некоторые из регулярных выражений, которые я пробовал (без обратной косой черты ради чтения):

/\d+({.*?})(?:(|\d+|$|))/;
/\d+({.+})(?:(|\d+|$|))/;
/\d+({.*?})(?:(|\d+|\B|))/;
/\d+({.+})(?:(|\d+|\B|))/;
/\d+({.*?})(?:(|\d+|))/;
/\d+({.+})\d+/;
/\d+({.*?})\d+/;

Это наиболее близкое к тому, что я получил, кроме:

/\d+({.*?})\d+|\d+({.*?})/
QString haystack = "5:4{"type":"someType","data":{"subJson":123}}"\
                       "9406:22{"type":"SomeOtherType","data":{"subJson":648,"data":{"subSubJson":25}}}"\
                       "125:10{"last":79}";     // The quotes are obviously escaped but reading sake...

QRegularExpression re = QRegularExpression("\\d+({.*?})\\d+|\\d+({.*?})");
QRegularExpressionMatchIterator i = re.globalMatch(haystack);

QStringList matches;
while (i.hasNext()) {
    QRegularExpressionMatch match = i.next();
    QString result = match.captured(1); // Group match
    matches << result;
}

qDebug() << matches;

Что я ожидаю:

"{"type":"someType","data":{"subJson":123}}"
"{"type":"SomeOtherType","data":{"subJson":648,"data":{"subSubJson":25}}}"
"{"last":79}"

Что я на самом деле получаю:

"{"type":"someType","data":{"subJson":123}}"
"{"type":"SomeOtherType","data":{"subJson":648,"data":{"subSubJson":25}}}"
"" //The last one wasn't matched

НО с полным совпадением я получаю это:

"4{"type":"someType","data":{"subJson":123}}9406"
"22{"type":"SomeOtherType","data":{"subJson":648,"data":{"subSubJson":25}}}125"
"10{"last":79}"
-1
задан Barmar 27 June 2019 в 06:22
поделиться

1 ответ

Решением было:

/\d+({.*?})(?:\d+|$)/

Сначала проверка на добавление цифр с помощью '\ d +', затем групповое совпадение для всего между фигурными скобками, не будучи при этом жадными до '({. *?}) ', и, наконец, исключенное групповое совпадение'?: 'остановит предыдущее групповое совпадение либо с набором цифр' \ d + ', либо в конце слова' $ ',' (?: \ d + | $) '

1
ответ дан emdou 27 June 2019 в 06:22
поделиться
Другие вопросы по тегам:

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