Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602

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

14.02.2017, 11:50. Показов 3575. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru