2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602

Работа с регулярными выражениями и исключения

14.02.2017, 11:50. Показов 3519. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Очень простой вопрос - какую взять библиотеку для работы с регулярными выражениями, удовлетворяющую одному из следующих условий:
1) Напоровшись на некорректное выражение, парсер не плюется исключениями, а возвращает false.
2) Парсер все же кидает исключение, но это исключение гарантированно содержит описание ошибки. Очень желательно, в utf-16.

Предупреждая вопрос "нафиг надо" - метод assign стандартного std::regex, плюется исключением с невероятно информативной строчкой "regex_error". Поэтому, мне надо прям на месте это исключение ловить и менять на более информативное. И я как-то не понимаю чем такой дизайн лучше дедовской проверки кодов возврата.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2017, 11:50
Ответы с готовыми решениями:

Работа с регулярными выражениями С++
Опишите функцию анализа номера, обработайте ошибку указания номера у недопустимом формате (допустимий формат (095)224-43-24)

Работа с регулярными выражениями (парсинг txt-файла)
подскажите пожалуйста. хочу сделать парсер по файлу тхт написал вот такой код с регулярными выражениями раньше не работал //...

Как пользоваться регулярными выражениями
Имеется текстовый файл с подобным содержанием: ////////////////////////////// Файл 12/1.19 Длина-Данных: 112 label: 55847391 ...

31
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.02.2017, 16:27
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от sys_beginner Посмотреть сообщение
если нет тогда и в выражениях типа а==б срабатывает?
Попробуйте в моём коде сделать std::cout << reg с explicit и без него.
Это (explicit для операторов преобразований), кстати, добавили лишь в С++11.

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
бумс!
Намёка не понял. Можно для тех, кто в танке?
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
14.02.2017, 16:29
Цитата Сообщение от MrGluck Посмотреть сообщение
То есть защищает от неявных преобразований.
Это когда например функция возвращает int, а мы пишем return true; ? Это имеется ввиду?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.02.2017, 16:35
Цитата Сообщение от sys_beginner Посмотреть сообщение
Это когда например функция возвращает int, а мы пишем return true; ? Это имеется ввиду?
Цитата Сообщение от MrGluck Посмотреть сообщение
Попробуйте в моём коде сделать std::cout << reg с explicit и без него.
.....
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
14.02.2017, 16:35
Цитата Сообщение от MrGluck Посмотреть сообщение
Попробуйте в моём коде сделать std::cout << reg с explicit и без него.
Без эксплисита работает. Но странно это. Вроде бы оператор << для Reg не предусмотрен
Или там такая логика: если такого оператора не предусмотрено то делается попытка преобразовать в bool?

Добавлено через 27 секунд
MrGluck,
Просто сразу не заметил про "попробовать" <<
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.02.2017, 16:36
Цитата Сообщение от sys_beginner Посмотреть сообщение
Без эксплисита работает. Но странно это. Вроде бы оператор << для Reg не предусмотрен
ничего странного, пробует преобразовать к bool и вывести
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
14.02.2017, 16:39
Цитата Сообщение от MrGluck Посмотреть сообщение
ничего странного, пробует преобразовать к bool и вывести
Ясно, спасибо!
Не знал про такую возможность
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
14.02.2017, 17:02  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Что мешает сделать класс-дескриптор?
Мешают двадцать строчек кода для обработки "замечательного" механизма исключений, против двух строчек для обработки дедовских кодов ошибок.
По-моему, очень веский повод искать библиотеку с более вменяемым дизайном.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.02.2017, 17:10
Renji, если буст уже есть то да, но вот таскать с собой такую большую либу в зависимостях ради экономии 20 строчек кода тоже не очень.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
14.02.2017, 17:52  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Renji, если буст уже есть то да, но вот таскать с собой такую большую либу в зависимостях ради экономии 20 строчек кода тоже не очень.
А тут есть один интересный момент - уже упоминавшаяся мной SLRE весит буквально несколько килобайт. При этом базовый синтаксис регулярок вполне тянет (но не тянет поиск с заменой). Это наводит на мысль что помимо тяжелого буста, где-то должны быть и легковесные решения типа "кинул cpp файл в проект и готово". Ну пусть даже без заглядываний вперед-назад и прочей экзотики. Но, похоже, на SLRE они и заканчиваются.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
14.02.2017, 18:42
Цитата Сообщение от MrGluck Посмотреть сообщение
Что мешает сделать класс-дескриптор?
Немного не понял, что такое "класс-дескриптор"? Откуда такое название?
Вообще оно не очень удобно получится.

Цитата Сообщение от MrGluck Посмотреть сообщение
std::string msg() const noexcept { return m_msg; }
Насколько хорош тут noexcept?

Цитата Сообщение от Renji Посмотреть сообщение
Это наводит на мысль что помимо тяжелого буста, где-то должны быть и легковесные решения типа "кинул cpp файл в проект и готово"
Буст кажется тяжелым только поначалу, когда он в одном месте, а потом он внезапно оказывается уже везде, потому что везде нужен
Но так-то есть еще https://github.com/google/re2/ - не один файлик, но все же. Там нет исключений (потому что гугл), и оно тоже, как и буст, может показать на место, где произошел фэйл.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.02.2017, 18:44
Цитата Сообщение от MrGluck Посмотреть сообщение
Намёка не понял. Можно для тех, кто в танке?
стринга при копировании может выбросить исключение.
и тогда std::terminate() сделает живительную автаназию всему процессу
noexcept нужно пользовать только там,
где гарантируется безопасность от исключений.
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.02.2017, 19:09
Цитата Сообщение от hoggy Посмотреть сообщение
noexcept нужно пользовать только там,
где гарантируется безопасность от исключений.
Мне почему-то приглючило, что копирования тут не будет (подразумевал поведение как при возврате l-value ссылки на const std::string), был не прав. Спасибо.

Цитата Сообщение от ct0r Посмотреть сообщение
Немного не понял, что такое "класс-дескриптор"? Откуда такое название?
Дескриптор - некая сущность, через которую можно обратиться к объекту. Как лучше обозвать класс, включающий другой при данной композиции?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.02.2017, 19:09

Не получается работать с регулярными выражениями
Добрый день, коллеги! Обращаюсь с вопросом, потому что новичок. Мне необходимо, используя регулярные выражения, скопировать определенные...

Проверка на наличие подстроки регулярными выражениями
Здравствуйте. С помощью регулярных выражений я пытаюсь проверить наличие подстроки. Для этого пишу такой код: std::regex...

Выбрать различные цифры из однотипных строк регулярными выражениями
есть много таких строк: &lt;AddOrder price=&quot;100.20&quot; orderId=&quot;199&quot; operation=&quot;BUY&quot; /&gt; &lt;DeleteOrder orderId=&quot;199&quot; /&gt; нужно выцепить отсюда...

Обработка файов регулярными выражениями.
Задайте верное направление. Исходная задача. Необходимо обработать текстовый файл &quot;умным образом&quot;. Где то достаточно просто...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Опции темы

Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru