Russian Qt Forum
Ноябрь 24, 2024, 12:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Составной поиск при помощи QRegExp  (Прочитано 4330 раз)
Andrew Vladoff
Гость
« : Сентябрь 08, 2011, 19:08 »

как найти несколько вложений в строке?

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


Как составить выражение чтобы искало все 3 подстроки в строке?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Сентябрь 08, 2011, 19:41 »

найти индекс каждой подстроки и проверить что он != -1 (для предложенных строк QRegExp вообще не нужен). или я не понял суть задачи.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Andrew Vladoff
Гость
« Ответ #2 : Сентябрь 08, 2011, 20:53 »

Цитировать
найти индекс каждой подстроки и проверить что он != -1 (для предложенных строк QRegExp вообще не нужен). или я не понял суть задачи.

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Сентябрь 08, 2011, 21:12 »

если надо просто проверить, содержатся ли заданные шаблоны в строке, то просто в цикле прогнать все шаблоны и сравнить индекс с -1.

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Andrew Vladoff
Гость
« Ответ #4 : Сентябрь 08, 2011, 21:28 »

Цитировать
если точно известно, что все шаблоны следуют один за другим, то можно попробовать так:

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Сентябрь 08, 2011, 21:36 »

значит только перебор в цикле
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.141 секунд. Запросов: 23.