Модуль regex.h в C и регулярные выражения
Автор: Кирилл, 20 лет, студент школы 21 и Вологодского университета, обучаюсь на программиста.
Введение
Регулярные выражения — инструмент для работы с текстом. В языке C, в стандартной библиотеке для их обработки используется модуль regex.h, предоставляющий разработчикам базовый функционал для поиска, сопоставления и обработки строк.
Что такое регулярные выражения?
Регулярные выражения (RegEx) — это язык шаблонов, предназначенный для описания последовательностей символов. С их помощью можно проверять строки на соответствие шаблону(как по трафарету), извлекать из них нужные данные или заменять определённые части текста.
Модуль regex.h: обзор
Основные функции:
- regcomp — компиляция (создание) регулярного выражения.
- regexec — проверка строки на соответствие шаблону.
- regfree — освобождение памяти после работы с регулярными выражениями.
Основные типы данных:
- regex_t - используется для хранения скомпилированного выражения.
- regmatch_t — описывает совпадения (позиции начала и конца).
Функция для создания регулярного выражения, при успехе возвращает 0. Принимает 3 аргумента:
regcomp(®ex, expression, flag);
- regex - указатель на ячейку в памяти, где будет сохраняться рег. выражение
- expression - строка, которая компилируется в регулярное выражение
- flag для указания типа компиляции
Виды Флажков:
- REG_EXTENDED - расширенный функционал для использования регулярных выражений
- REG_ICASE - игнорирует различия регистра
- REG_BASIC(обычно - 0) - базовый функционал регулярных выражений(+ и ? считаются обычными символами)
Функция, выполняющая поиск в строке по шаблону, при совпадении возвращает 0, иначе - REG_NOMATCH. 5 аргументов:
int regexec(const regex_t *regex, const char *string, size_t nmatch, regmatch_t pmatch[], int flags);
- regex - шаблон.
- string - строка, в которой происходит поиск.
- nmatch - количество элементов в массиве pmatch(сколько подстрок надо найти) / 0 - если не нужна инфа о подстроках.
- pmatch - Массив структур типа regmatch_t, в котором каждый элемент - совпадение: pmatch.rm_so - начало совпадения (индекс); pmatch.rm_eo - конец совпадения (индекс), Null - если не нужен.
- flags - влияет на поведение функции, обычно 0.
regfree(®ex) — освобождение ресурсов, занятых компилированным регулярным выражением.
как работает строчка с выводом:вместо звездочки подставляется число(разница между началом совпадения и концом), которое ограничивает вывод; затем указатель на строку, который сдвигается на начало совпадения.
Теперь вы знаете, как работать с регулярными выражениями на языке C, как обрабатывать строки с помощью них. Если я допустил ошибку или вам есть что добавить, добро пожаловать в комментарии).