如何提取由特定模式分开的JSON对象字符串

How to extract Json object strings separated by specific pattern?

本文关键字:模式 JSON 字符串 对象 何提取 提取      更新时间:2023-10-16

,所以问题非常简单。几个小时后,浏览了关于正则的线程,我仍然无法提出那些会按照代码部分所述的字符串。

中所述。

这是我尝试过的一些正则表达式(为了阅读而没有逃脱后斜线(:

/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}"

解决方案是:

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

首先使用" d '进行预处理数字的支票,然后组匹配卷曲括号之间的所有内容而不贪婪,因此'({。在一组数字' d '或单词'$',',(?: d | $('

的结尾处停止前组匹配