Russian Qt Forum

Qt => Общие вопросы => Тема начата: Andrew Vladoff от Сентябрь 08, 2011, 19:08



Название: Составной поиск при помощи QRegExp
Отправлено: Andrew Vladoff от Сентябрь 08, 2011, 19:08
как найти несколько вложений в строке?

Есть
Код:
string =  "qqqqqqqWWWWWWaaaaaa"; // основная строка
 
str1 = "qwe";  // искомые выражения
str2 = "WWa";
str3 = "aaaa";


Как составить выражение чтобы искало все 3 подстроки в строке?


Название: Re: Составной поиск при помощи QRegExp
Отправлено: kambala от Сентябрь 08, 2011, 19:41
найти индекс каждой подстроки и проверить что он != -1 (для предложенных строк QRegExp вообще не нужен). или я не понял суть задачи.


Название: Re: Составной поиск при помощи QRegExp
Отправлено: Andrew Vladoff от Сентябрь 08, 2011, 20:53
Цитировать
найти индекс каждой подстроки и проверить что он != -1 (для предложенных строк QRegExp вообще не нужен). или я не понял суть задачи.

Я привел простейший случай. В реальности используются в подстроках регулярные выражения. Конечно можно три раза проверить вхождение подстрок в строку, но хотелось бы создать шаблон, возвращающий значение при наличии всех трёх подстрок в выражении. И подстрок может быть разное количество.


Название: Re: Составной поиск при помощи QRegExp
Отправлено: kambala от Сентябрь 08, 2011, 21:12
если надо просто проверить, содержатся ли заданные шаблоны в строке, то просто в цикле прогнать все шаблоны и сравнить индекс с -1.

если точно известно, что все шаблоны следуют один за другим, то можно попробовать так:
Код
C++ (Qt)
QStringList patterns;
QRegExp re(patterns.join(".*")); // можно еще соединять с помощью (?:.*) для визуального отделения всех шаблонов
re.setMinimal(true);


Название: Re: Составной поиск при помощи QRegExp
Отправлено: Andrew Vladoff от Сентябрь 08, 2011, 21:28
Цитировать
если точно известно, что все шаблоны следуют один за другим, то можно попробовать так:

В строке шаблоны могут  встречаться в произвольном порядке, главное обязательное наличие их всех в искомой строке.


Название: Re: Составной поиск при помощи QRegExp
Отправлено: kambala от Сентябрь 08, 2011, 21:36
значит только перебор в цикле