2014-09-15 4 views
-4

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

+0

Что вы попробовали? – Silicomancer

+0

используйте lookbehind '(? <=:) \ S +' или '(? <=:). *' –

+0

(? <=:) \ S + или (? <=:). * Не работает – user1824542

ответ

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(); 
} 
+0

thnx! как я могу получить строку перед «:»? – user1824542

+0

@ пользователь1824542 смотрите мой редактирование пожалуйста. – Chernobyl

Смежные вопросы