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

Регулярное выражение (regular expression) — это способ описания последовательности символов. Это чрезвычайно мощное средство программирования. Однако описание языков, используемых для определения регулярных выражений, выходит за рамки этой книги. Лучше сосредоточиться на использовании библиотеки регулярных выражений языка С++ (библиотеки RE), являющейся частью новой библиотеки. Библиотека RE определена в заголовке regex и задействует несколько компонентов, перечисленных в табл. 17.4.

Таблица 17.4. Компоненты библиотеки регулярных выражений

regex Класс, представляющий регулярное выражение regex_match() Сравнивает последовательность символов с регулярным выражением regex_search() Находит первую последовательность, соответствующую регулярному выражению regex_replace() Заменяет регулярное выражение, используя заданный формат sregex_iterator Адаптер итератора, вызывающий функцию regex_search() для перебора совпадений в строке smatch Класс контейнера, содержащего результаты поиска в строке ssub_match Результаты совпадения выражений в строке

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

Класс regex представляет регулярное выражение. Кроме инициализации и присвоения, с классом regex допустимо немного операций. Они перечислены в табл. 17.6.

Функции regex_match() и regex_search() определяют, соответствует ли заданная последовательность символов предоставленному объекту класса regex. Функция regex_match() возвращает значение true, если вся исходная последовательность соответствует выражению; функция regex_search() возвращает значение true, если в исходной последовательности выражению соответствует подстрока. Есть также функция regex_replace(), описываемая в разделе 17.3.4.

Аргументы функции regex описаны в табл. 17.5. Эти функции возвращают логическое значение и допускают перегрузку: одна версия получает дополнительный аргумент типа smatch. Если он есть, эти функции сохраняют дополнительную информацию об успехе обнаружения соответствия в предоставленном объекте класса smatch.