Qt - Как извлечь текстовые фрагменты из QString, содержащиеся в определенном шаблоне

Возьми это как пример

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

Я хотел бы найти все вхождения текста, содержащиеся в LINK().

В моем случае он должен возвращать aaa, bbb и ccc


person lolo67    schedule 21.03.2019    source источник


Ответы (1)


Используйте для этого 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+)\\)")

person Dimitry Ernot    schedule 21.03.2019