Regex в языке программирования C: справочник и примеры
Regex (регулярные выражения) в языке программирования C используются для поиска, сопоставления и замены текста в строках. С помощью regex можно точно определить, соответствует ли заданная строка заданному шаблону.
В C стандартная библиотека для работы с регулярными выражениями называется POSIX regex, которая доступна в заголовочном файле
Пример использования POSIX regex:
c
#include
#include
int main() {
regex_t regex;
int reti;
char msgbuf[100];
// компиляция регулярного выражения
reti = regcomp(®ex, "^a[[:alnum:]]+", 0);
if (reti) {
fprintf(stderr, "Could not compile regex\n");
return 1;
}
// поиск соответствия в строке
reti = regexec(®ex, "apple", 0, NULL, 0);
if (!reti) {
printf("Match\n");
} else if (reti == REG_NOMATCH) {
printf("No match\n");
} else {
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
fprintf(stderr, "Regex match failed: %s\n", msgbuf);
return 1;
}
// освобождение ресурсов
regfree(®ex);
return 0;
}
В этом примере мы компилируем регулярное выражение "^a[[:alnum:]]+" (начинается с буквы "a", за которой следуют один или более алфавитно-цифровых символов), используя функцию regcomp(). Затем мы выполняем поиск соответствия в строке "apple" с помощью функции regexec(). Если соответствие найдено, функция выводит "Match"; в противном случае выводится "No match". Функция regerror() используется для вывода сообщения об ошибке, если поиск не удался.
Регулярные выражения в C также могут использоваться для замены (replacing) текста в строках. Например:
c
#include
#include
int main() {
regex_t regex;
int reti;
char str[] = "The quick brown fox jumps over the lazy dog";
char newstr[100];
const char *pattern = "fox";
const char *replace = "cat";
// компиляция регулярного выражения
reti = regcomp(®ex, pattern, 0);
if (reti) {
fprintf(stderr, "Could not compile regex\n");
return 1;
}
// выполнение замены в строке
reti = regreplace(®ex, str, strlen(str), newstr, sizeof(newstr), NULL);
if (reti) {
fprintf(stderr, "Could not replace regex\n");
return 1;
}
printf("Original string: %s\n", str);
printf("New string: %s\n", newstr);
// освобождение ресурсов
regfree(®ex);
return 0;
}
В этом примере мы компилируем регулярное выражение "fox" и затем заменяем его на "cat" в строке "The quick brown fox jumps over the lazy dog" с помощью функции regreplace(). Результат замены сохраняется в новой строке newstr. Вывод программы будет:
Original string: The quick brown fox jumps over the lazy dog
New string: The quick brown cat jumps over the lazy dog
Как видно из этих примеров, regex в C предоставляет мощный инструмент для работы с текстом в строках, который может использоваться для поиска и замены соответствий в тексте с использованием множества различных шаблонов.