首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用QRegularExpression多行选项的Qt

使用QRegularExpression多行选项的Qt
EN

Stack Overflow用户
提问于 2015-03-27 20:09:48
回答 3查看 2.3K关注 0票数 3

我正在编写一个使用QRegularExpression和MultilineOption的程序,我编写了这段代码,但是在第一行中匹配stop。为什么?我哪里做错了?

代码语言:javascript
运行
复制
QString recv = "AUTH-<username>-<password>\nINFO-ID:45\nREG-<username>-<password>-<name>-<status>\nSEND-ID:195-DATE:12:30 2/02/2015 <esempio>\nUPDATEN-<newname>\nUPDATES-<newstatus>\n";

QRegularExpression exp = QRegularExpression("(SEND)-ID:(\\d{1,4})-DATE:(\\d{1,2}):(\\d) (\\d{1,2})\/(\\d)\/(\\d{2,4}) <(.+)>\\n|(AUTH)-<(.+)>-<(.+)>\\n|(INFO)-ID:(\\d{1,4})\\n|(REG)-<(.+)>-<(.+)>-<(.+)>-<(.+)>\\n|(UPDATEN)-<(.+)>\\n|(UPDATES)-<(.+)>\\n", QRegularExpression::MultilineOption);

qDebug() << exp.pattern();

QRegularExpressionMatch match = exp.match(recv);
qDebug() << match.lastCapturedIndex();
for (int i = 0; i <= match.lastCapturedIndex(); ++i) {
    qDebug() << match.captured(i);
}

有人能帮我吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-27 23:01:38

答案是您应该使用.globalMatch方法而不是.match

关于这一点,请参见QRegularExpression文档

尝试对给定的主题字符串执行正则表达式的全局匹配,从主题内的偏移位置开始,使用matchType类型的匹配并遵守给定的matchOptions。返回的QRegularExpressionMatchIterator位于第一个匹配结果之前(如果有的话)。

此外,您还可以删除QRegularExpression::MultilineOption选项,因为它没有被使用。

样本代码:

代码语言:javascript
运行
复制
QRegularExpressionMatchIterator i = exp.globalMatch(recv);
while (i.hasNext()) {
    QRegularExpressionMatch match = i.next();
    // ...
}
票数 3
EN

Stack Overflow用户

发布于 2017-11-03 14:34:23

实际上,我在谷歌上发现了类似的问题,但我不能完全同意答案,因为我认为大多数关于多行匹配与新QRegularExpression匹配的问题都可以这样回答:

使用允许(.)的QRegularExpression::DotMatchesEverythingOption选项以匹配换行符。它非常有用,然后从QRegExp移植。

票数 2
EN

Stack Overflow用户

发布于 2015-03-27 22:41:38

你得到了一个or表达式,第一个表达式是真的,工作完成了。您需要拆分字符串并循环数组,以便与此表达式进行比较,我认为这是可行的。

如果数据每一次都具有相同的结构,则可以使用以下内容:

"(AUTH)-<([^>]+?)>-<([^>]+?)>\\nINFO-ID:(\\d+)\\n(REG)-<([^>]+?)>-<([^>]+?)>-<([^>]+?)>-<([^>]+?)>\\n(SEND)-ID:(\\d+)-DATE:(\\d+):(\\d+) (\\d+)/(\\d+)/(\\d+) <([^>]+?)>\\n(UPDATEN)-<([^>]+?)>\\n(UPDATES)-<([^>]+?)>"

21场比赛

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29309383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档