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

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

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

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

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

1 Ответ

0 голосов
/ 21 марта 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...