Qt-如何从特定模式中包含的QString中提取文本片段

时间:2019-03-21 13:57:03

标签: qt qstring qregexp

以这个为例

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

我想找到LINK()中包含的所有文本。

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

1 个答案:

答案 0 :(得分:0)

为此使用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+)\\)")

之类的方式来更改模式