Как сопоставить строку за символом в QT, используя RegExp?

Как сопоставить каждую строку за ":"? Например: хотите сопоставить "3.23423" в "roll:3.23423" или "true" в "smth:true".

1 ответ

Решение

Попробуй это:

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();
}
Другие вопросы по тегам