Russian Qt Forum

Qt => Вопросы новичков => Тема начата: psk07 от Сентябрь 23, 2019, 12:57



Название: [РЕШЕНО] QRegExp и QLineEdit
Отправлено: psk07 от Сентябрь 23, 2019, 12:57
Всем привет. Помогите люди добрые с QRexExp.
Стоит нестандартная задача, надо сделать поисковое окно, в котором 50 QLineEdit. 10 строк по 5 полей ввода. В каждой строке поля ввода между собой соединены, как значение &, а сами строки между собой соединены, как значения |.

Помогите пожалуй сделать рабочий QRegExp. В моем случае regExp.indexIn() проверяет QString на соответствие поисковому запросу.

На сайте regex101 данный вариант работает:
^.*(((?=.*Line1)(?=.*Line2)(?=.*Line3)(?=.*Line4)(?=.*Line5))|((?=.*Line6)(?=.*Line7)(?=.*Line8)(?=.*Line9)(?=.*Line10))|((?=.*Line11)(?=.*Line12)(?=.*Line13)(?=.*Line14)(?=.*Line15))|((?=.*Line16)(?=.*Line17)(?=.*Line18)(?=.*Line19)(?=.*Line20))|((?=.*Line21)(?=.Line22*)(?=.*Line23)(?=.*Line24)(?=.*Line25))|((?=.*Line26)(?=.*Line27)(?=.*Line28)(?=.*Line29)(?=.*Line30))|((?=.*Line31)(?=.*Line32)(?=.Line33)(?=.Line34)(?=.*Line35))|((?=.*Line36)(?=.*Line37)(?=.*Line38)(?=.*Line39)(?=.*Line40))|((?=.*Line41)(?=.*Line42)(?=.*Line43)(?=.*Line44)(?=.*Line45))|((?=.*Line46)(?=.*Line47)(?=.48)(?=.*49)(?=.*50))).*$

Если я правильно понимаю, то в QRegExp беды с точкой, то тогда чем заменить ленивый поиск .* ?

Заранее всем спасибо.


Название: Re: QRegExp и QLineEdit
Отправлено: qate от Сентябрь 23, 2019, 15:47
В эпоху интерфейсов с одной кнопкой, 50 QLineEdit-ов смотрятся очень приятно )

QRegExp::setMinimal ?


Название: Re: QRegExp и QLineEdit
Отправлено: kambala от Сентябрь 23, 2019, 20:15
смущает ?= — может там должно быть ?: ? да и QRexExp, в отличие от QRegularExpression, не поддерживает ?= (lookahead).

а почему нельзя просто тупо склеить содержимое полей ввода одной строки? Line1Line2Line3Line4Line5. Тогда искомое выражение будет (?:Line1Line2Line3Line4Line5)|(?:Line6Line7Line8Line9Line10)|... Или каждое поле ввода матчит лишь часть строки? В таком случае поставить .* между ними (по краям внутри скобки не надо).


Название: Re: QRegExp и QLineEdit
Отправлено: psk07 от Сентябрь 24, 2019, 09:15
смущает ?= — может там должно быть ?: ? да и QRexExp, в отличие от QRegularExpression, не поддерживает ?= (lookahead).

а почему нельзя просто тупо склеить содержимое полей ввода одной строки? Line1Line2Line3Line4Line5. Тогда искомое выражение будет (?:Line1Line2Line3Line4Line5)|(?:Line6Line7Line8Line9Line10)|... Или каждое поле ввода матчит лишь часть строки? В таком случае поставить .* между ними (по краям внутри скобки не надо).

Если все 5 значений находятся в строке, до данная строка идёт на отображение в QListView.
а) В данном варианте склейки есть чувствительность поиска к порядку ввода данных Line1Line2Line3Line4Line5, как можно решить данную проблему?
б) Такую же проблему заметил с поиском по значениям или. Поля поиска должны соответствовать своему положению в строке, L6-L10 не может быть раньше L1-L5.
в) Каждое поле ввода матчит часть строки.  Правильно я вас понял насчёт вставки .* ?  
(?:.*Line1.*Line2.*Line3.*Line4.*Line5)|(?:.*Line6.*Line7.*Line8.*Line9.*Line10)|...

Заранее спасибо.


Название: Re: QRegExp и QLineEdit
Отправлено: psk07 от Сентябрь 24, 2019, 09:16
В эпоху интерфейсов с одной кнопкой, 50 QLineEdit-ов смотрятся очень приятно )

QRegExp::setMinimal ?
Опробую сегодня, спасибо за направление, там же нашёл и пилюли для борьбы с регистром.


Название: Re: QRegExp и QLineEdit
Отправлено: kambala от Сентябрь 24, 2019, 11:31
а) путем создания 5!=120 перестановок для каждой строки: 12345, 12354, ...
б) если склеивание через | работает не так, как хотелось бы, то можно просто перебирать строки в цикле по очереди: выход из цикла при совпадении
в) .* перед ?: не надо (это сразу так и работает)

хитрый, конечно, функционал... :)


Название: Re: QRegExp и QLineEdit
Отправлено: psk07 от Сентябрь 24, 2019, 15:18
а) путем создания 5!=120 перестановок для каждой строки: 12345, 12354, ...
б) если склеивание через | работает не так, как хотелось бы, то можно просто перебирать строки в цикле по очереди: выход из цикла при совпадении
в) .* перед ?: не надо (это сразу так и работает)

хитрый, конечно, функционал... :)
Не совсем понял насчёт пункта а, буду благодарен за набросок.)
По поводу пункта в, по мистическим причинам работает только с .* перед ?:
Второй день уже прыгаю с бубном вокруг этого функционала)


Название: Re: QRegExp и QLineEdit
Отправлено: kambala от Сентябрь 24, 2019, 16:38
а) если интересует абсолютно произвольный порядок пяти строк, то нужно рассмотреть все возможные перестановки пяти элементов, их количество равно 5!=120. Пример для трех, 3!=6: 123, 132, 312, 321, 231, 213. Все эти варианты склеить через |, ну либо циклом аналогично пункту б)


Название: Re: QRegExp и QLineEdit
Отправлено: psk07 от Сентябрь 25, 2019, 07:55
а) если интересует абсолютно произвольный порядок пяти строк, то нужно рассмотреть все возможные перестановки пяти элементов, их количество равно 5!=120. Пример для трех, 3!=6: 123, 132, 312, 321, 231, 213. Все эти варианты склеить через |, ну либо циклом аналогично пункту б)
а)Методом проб и ошибок достиг нужного  результата с Line№Line№Line№Line№Line№, вот таким результатом. (?=.*Line№)(?=.*Line№)(?=.*Line№)(?=.*Line№)(?=.*Line№), но перестали работать значения или.
(?=.*Line№)(?=.*Line№)(?=.*Line№)(?=.*Line№)(?=.*Line№)|(?=.*Line№)(?=.*Line№)(?=.*Line№)(?=.*Line№)(?=.*Line№)...

Подскажите пожалуйста, как можно решить данную проблему?

б) Дальше у меня задача, через QCombobox дать пользователю возможность выбора подсветки фона для каждого .*Line№.*Line№.*Line№.*Line№.*Line№.  Буду рад любым интересным соображениям по реализации.)


Название: Re: QRegExp и QLineEdit
Отправлено: kambala от Сентябрь 25, 2019, 11:52
а) вместо или можно цикл
б) не очень понятно чего хочется добиться :) вставить по комбобоксу в строку, в котором выбирать цвет строки?


Название: Re: QRegExp и QLineEdit
Отправлено: psk07 от Сентябрь 25, 2019, 12:32
а) вместо или можно цикл
б) не очень понятно чего хочется добиться :) вставить по комбобоксу в строку, в котором выбирать цвет строки?
а) на той же мысли остановился)
б) каждой строке поиска пользователь может задавать цвет фона найденным совпадениям.


Название: Re: QRegExp и QLineEdit
Отправлено: kambala от Сентябрь 25, 2019, 13:55
Цитировать
вставить по комбобоксу в строку, в котором выбирать цвет строки
это не подходит? либо я все равно не понял требования...


Название: Re: QRegExp и QLineEdit
Отправлено: psk07 от Сентябрь 25, 2019, 14:26
Цитировать
вставить по комбобоксу в строку, в котором выбирать цвет строки
это не подходит? либо я все равно не понял требования...
Спасибо за помощь с регуляркой. С комбобоксом, пока сам повожусь, т.к ещё до конца не продумал реализацию, потому не не получается корректно выразить мысль.