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

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

14.02.2017, 11:50. Показов 3498. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru