Автор: Кирилл, 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) — освобождение ресурсов, занятых компилированным регулярным выражением.#include <stdio.h> #include <regex.h> int main() { char * string = "hello 11111 world"; regex_t regex[2];//создается массив для регулярных выражений regcomp(®ex[0], "hello", 0);//создание первого регулярного выражения regcomp(®ex[1], "world", 0);//второго regmatch_t match;//переменная для отлова совпадений for (int i = 0; i < 2; i++) { if (regexec(®ex[i], string, 1, &match, 0) == 0) {//ищет совпадения printf("%.*s ", match.rm_eo - match.rm_so, string + match.rm_so); //hello world } } for (int i = 0; i < 2; i++) regfree(®ex[i]); //освобождение ресурсов return 0; }как работает строчка с выводом:вместо звездочки подставляется число(разница между началом совпадения и концом), которое ограничивает вывод; затем указатель на строку, который сдвигается на начало совпадения.Теперь вы знаете, как работать с регулярными выражениями на языке C, как обрабатывать строки с помощью них. Если я допустил ошибку или вам есть что добавить, добро пожаловать в комментарии).