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

#qt #qstring #qregexp

#qt #qstring #qregexp

Вопрос:

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

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

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

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

Ответ №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 )\)")