如何使用RegExp在QT中匹配字符串后面的字符?

时间:2014-09-15 14:33:40

标签: regex qt qregexp qregularexpression

如何匹配“:”后面的每个字符串? 例如:想要匹配“roll:3.23423”中的“3.23423”或“smth:true”中的“true”。

1 个答案:

答案 0 :(得分:2)

试试这个:

QRegExp rx("[a-z]+\:.+");
QString ss = "roll:3.23423";

int poss = 0;
while ((poss = rx.indexIn(ss, poss)) != -1) {
    qDebug( )<< rx.cap(0).split(":").last();
    poss += rx.matchedLength();
}

输出:

"3.23423" 

但有一个人告诉我split()可能很慢,所以你也可以使用:

QRegExp rx("[a-z]+\:.+");
QString ss = "roll:3.23423";

int poss = 0;
while ((poss = rx.indexIn(ss, poss)) != -1) {

    QString g = rx.cap(0);
    int p = rx.cap(0).indexOf(":");
    qDebug( )<< g.mid(p+1);
    poss += rx.matchedLength();
}

它应该更快。

更新(之前)。使用这个循环:

while ((poss = rx.indexIn(ss, poss)) != -1) {

    QString g = rx.cap(0);
    int p = rx.cap(0).lastIndexOf(":");
    qDebug( )<< g.mid(0,p);
    poss += rx.matchedLength();
}