Читаем Язык программирования C++. Пятое издание полностью

Определены в типах regex и regex_constants::syntax_option_type
error_collateНедопустимый запрос объединения элементов
error_ctypeНедопустимый класс символов
error_escapeНедопустимый управляющий или замыкающий символ
error_backrefНедопустимая обратная ссылка
error_brackНесоответствие квадратных скобок ([ или ])
error_parenНесоответствие круглых скобок (( или ))
error_braceНесоответствие фигурных скобок ({ или })
error_badbraceНедопустимый диапазон в фигурных скобках ({})
error_rangeНедопустимый диапазон символов (например, [z-a])
error_spaceНедостаточно памяти для выполнения этого регулярного выражения
error_badrepeatПовторяющийся символ (*?, + или {) не предваряется допустимым регулярным выражением
error_complexityЗатребованное соответствие слишком сложно
error_stackНедостаточно памяти для вычисления соответствия

Например, в схеме вполне можно пропустить по неосторожности скобку:

try {

 // ошибка: пропущена закрывающая скобка после alnum; конструктор

 // передаст исключение

 regex r("[[:alnum:]+\\.(cpp|схх|cc)$", regex::icase);

 } catch (regex_error e)

 { cout << e.what() << "\ncode: " << e.code() << endl; }

При запуске на системе авторов эта программа выводит следующее:

regex_error(error_brack):

The expression contained mismatched [ and ].

code: 4

Компилятор определяет функцию-член code() для возвращения позиции ошибок, перечисленных в табл. 17.7, счет которых, как обычно, начинается с нуля.

Совет. Избегайте создания ненужных регулярных выражений

Как уже упоминалось, представляющая регулярное выражение "программа" компилируется во время выполнения, а не во время компиляции. Компиляция регулярного выражения может быть на удивление медленной операцией, особенно если используется расширенная грамматика регулярного выражения или выражение слишком сложно. В результате создание объекта класса regex и присвоение нового регулярного выражения уже существующему объекту класса regex может занять много времени. Для минимизации этих дополнительных затрат не создавайте больше объектов класса regex, чем необходимо. В частности, если регулярное выражение используются в цикле, его следует создать вне цикла, избежав перекомпиляции при каждой итерации.

Классы регулярного выражения и тип исходной последовательности

Поиск возможен в любой из исходных последовательностей нескольких типов. Входные данные могут быть обычными символами типа char или wchar_t, и эти символы могут храниться в библиотечной строке или в массиве символов (или в его версии для wchar_t, или wstring). Библиотека RE определяет отдельные типы, соответствующие этим разным типам исходных последовательностей.

Предположим, например, что класс regex содержит регулярное выражение типа char. Для типа wchar_t библиотека определяет также класс wregex, поддерживающий все операции класса regex. Единственное различие в том, что инициализаторы класса wregex должны использовать тип wchar_t вместо типа char.

Перейти на страницу:

Похожие книги

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.

Гэри Розенцвейг

Программирование, программы, базы данных / Программирование / Книги по IT
Секреты приложений Google
Секреты приложений Google

Даже продвинутые пользователи Интернета не подозревают о тех огромных возможностях, которые предоставляют сервисы Google. Автор рассказывает о таких «секретах» сервисов, которые просто немедленно хочется использовать! Создавать сайты и презентации, бродить по улочкам Парижа, изучать звездное небо – все это доступно каждому, кто сидит у экрана монитора и имеет доступ в Интернет. Книга научит вас работать с веб-приложениями и тысячекратно увеличить свои возможности с помощью новейших технологий. Она написана легким, доступным языком и не требует от читателя наличия каких-либо специальных знаний. Книга содержит множество примеров, иллюстраций и будет полезна всем, кто не стоит на месте и стремится сделать свою жизнь более насыщенной и интересной.

Денис Балуев , Денис Игоревич Балуев

Программирование, программы, базы данных / Интернет / Программное обеспечение / Книги по IT