首页 > 解决方案 > Qt - 如何从包含在特定模式中的 QString 中提取文本片段

问题描述

以此为例

QString("= LINK(aaa) + 2 + LINK(bbb) + LINK(ccc)");

我想查找 LINK() 中包含的所有文本出现。

在我的情况下,它应该返回 aaa、bbb 和 ccc

标签: qtqstringqregexp

解决方案


为此使用QRegExp

QString s("= LINK(aaa) + 2 + LINK(bbb) + LINK(ccc)");
QRegExp rx("LINK\\((.+)\\)");
rx.setMinimal(true);
int i = rx.indexIn(s);
while(i != -1)
{
    qDebug() << rx.capturedTexts() << rx.cap(1);
    i = rx.indexIn(s, i) + rx.cap(0).length();
}

QRegExp::indexIn将返回第一场比赛的位置。添加捕获文本的长度允许您浏览整个字符串。

就我而言,我必须使用QRegExp::setMinimal()使正则表达式不贪婪。如果你只有字母或数字,你可以用类似的东西改变模式QRegExp rx("LINK\\((\\w+)\\)")


推荐阅读