Qt. Регулярные выражения в GUI

Модератор: Модераторы разделов

vipermagi
Сообщения: 83
ОС: AgiliaLinux

Qt. Регулярные выражения в GUI

Сообщение vipermagi »

Суть приложения: нужно в исходном тексте найти разные подстроки (возможно даже блоки), а потом из них сформировать сообщение, т.е. в места в шаблоне подставить найденные куски. Т.е. пользователь создаёт несколько правил и вбивает туда строки регулярных выражений. А потом в шаблоне в нужных местах вбивает например \1, \2 и т.д.

С тем, что в QRegExp'е кутэшном пользователю работать не очень удобно. Да и реализация под кишки кутей задумана, а не для гуя; чего только стоит отсутствие поддержки многострочности, а про подобное "\\b" я вообще молчу.

Посоветуйте библиотечку может какую.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Qt. Регулярные выражения в GUI

Сообщение NickLion »

Ничего не понятно, что за кишки, пир чём gui и библиотека регулярок. Чем QRegExp не нравится? \b там есть. C multi-line не хорошо было, в 5-й версии обещали исправить, не проверял.

А так, в новом стандарте C++ есть регулярки: http://www.cplusplus.com/reference/regex/
Да и в boost они давно есть.
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: Qt. Регулярные выражения в GUI

Сообщение vipermagi »

NickLion писал(а): ↑
21.02.2014 22:15
Ничего не понятно, что за кишки, пир чём gui и библиотека регулярок. Чем QRegExp не нравится? \b там есть. C multi-line не хорошо было, в 5-й версии обещали исправить, не проверял.

А так, в новом стандарте C++ есть регулярки: http://www.cplusplus.com/reference/regex/
Да и в boost они давно есть.


"Кишки" - это значит код, который пользователь не увидит. В QRegExp оно хромое на костылях http://qt-project.org/wiki/Regexp_engine_in_Qt5. Ни \b, а \\b. А ещё вот из документации: "Замечание: Компиляторы C++ преобразуют обратные наклонные черты в строках. Для включения \ в регулярное выражение введите её дважды, т.е. \\. Для соответствия обратной наклонной черты самой себе введите её четыре раза, т.е. \\\\."
В общем всё это удобству и функциональности не сильно способствует.

Новый стандарт мне пока не доступен, а буст пока погляжу.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21556
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Qt. Регулярные выражения в GUI

Сообщение Bizdelnick »

Я за Qt не в курсе и, может, вообще не въехал в тему, но если
vipermagi писал(а): ↑
22.02.2014 02:08
Компиляторы C++ преобразуют обратные наклонные черты в строках
то какое отношение к этому имеет
vipermagi писал(а): ↑
21.02.2014 21:42
пользователь создаёт несколько правил и вбивает туда строки регулярных выражений
Это же происходит уже после компиляции?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Qt. Регулярные выражения в GUI

Сообщение NickLion »

vipermagi писал(а): ↑
22.02.2014 02:08
"Кишки" - это значит код, который пользователь не увидит.

Пользователь никакой код не должен видеть. Если нужно пользователью в руки дать инструмент, дайте ему kate, там есть поиск и замена по регулярному выражению.

vipermagi писал(а): ↑
22.02.2014 02:08
Ни \b, а \\b. А ещё вот из документации: "Замечание: Компиляторы C++ преобразуют обратные наклонные черты в строках. Для включения \ в регулярное выражение введите её дважды, т.е. \\. Для соответствия обратной наклонной черты самой себе введите её четыре раза, т.е. \\\\."
В общем всё это удобству и функциональности не сильно способствует.

Ну, так \\b — это в коде программы. А в строке будет уже \b. Не понял, что Вам не нравится. В boost будет то же самое.
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: Qt. Регулярные выражения в GUI

Сообщение vipermagi »

NickLion писал(а): ↑
22.02.2014 23:27
Пользователь никакой код не должен видеть.

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

NickLion писал(а): ↑
22.02.2014 23:27
Если нужно пользователью в руки дать инструмент, дайте ему kate, там есть поиск и замена по регулярному выражению.

Истинная задача не состоит в поиске фраз в тексте. Поиск фраз в тексте это промежуточный этап работы программы, а не пользователя. Пользователь на момент завершения составления выражения не может сразу начать поиск и получить результат. И вообще, в данном случае регулярные выражения вещь не нужная, а не обходимая; не представляю как без них здесь обойтись.

NickLion писал(а): ↑
22.02.2014 23:27
Ну, так \\b — это в коде программы. А в строке будет уже \b. Не понял, что Вам не нравится. В boost будет то же самое.


Да, уже прочитал об этом, но это не в boost, а как бы string виноват. Действительно, в строке могут быть такие штуки как \n и при их обработке слэши вырезаются первый раз либо со следующим символом либо без. И regex точно так же как и string вырезает свои служебные вещи со слэшами, т.е. уже второй раз. Ну значит тогда пользователь будет писать слэши как есть, а уже пусть принимающий метод удваивает все их перед передачей в regex. Мозги не хотели понимать, что удвоенные слэши это не какой-то особый синтаксис, а фаза "Замечание: Компиляторы C++ преобразуют обратные наклонные черты в строках. Для включения \ в регулярное выражение введите её дважды, т.е. \\" из документации кутей пониманию совершенно не способствовала. Надеюсь это будет единственный такой прикол.
Спасибо сказали: