REGEX(3) | Руководство программиста Linux | REGEX(3) |
regcomp, regexec, regerror, regfree - функции регулярных выражений POSIX
#include <sys/types.h> #include <regex.h>
int regcomp(regex_t *preg, const char *regex, int cflags);
int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size);
void regfree(regex_t *preg);
Функция regcomp() используется для компиляции регулярного выражения в формат, который подходит для последующих поисков с помощью regexec().
regcomp() передаётся указатель на область хранения буферного шаблона preg, указатель на заканчивающуюся null строку regex и флаги cflags, используемые для определения типа компиляции.
Все поиски регулярных выражений должны выполняться с помощью скомпилированного буферного шаблона, поэтому regexec() должна всегда вызываться с адресом буферного шаблона, инициализированного функцией regcomp().
Значение cflags может состоять из поразрядного or нуля или нескольких следующих значений:
Функция regexec() используется для сравнения строки, завершающейся null, с предварительно обработанным буферным шаблоном preg. Аргументы nmatch и pmatch используются для предоставления информации о местонахождении любых совпадений. Значение eflags может быть поразрядным ИЛИ одного или обоих значений REG_NOTBOL и REG_NOTEOL. Данные значения определяют поведение процесса сравнения так, как описано ниже.
Если REG_NOSUB не установлен при компиляции буферного шаблона, то возможно получать информацию о положении совпадений. Значение pmatch должно быть определено так, чтобы иметь, по крайней мере, nmatch элементов. Они заполняются regexec() адресами внутристрочных совпадений. Смещения подвыражения, начинающегося с i-й открытой скобки, сохраняется в pmatch[i]. Адрес совпадения всего регулярного выражения сохраняется в pmatch[0] (заметим, что чтобы вернуть смещения совпадений N подвыражений, значение nmatch должно быть не менее N+1). Любые неиспользованные элементы структуры будут содержать значение -1.
Структура regmatch_t, являющаяся типом pmatch, определена в <regex.h>:
typedef struct { regoff_t rm_so; regoff_t rm_eo; } regmatch_t;
Каждый элемент rm_so, не равный -1, показывает начальное смещение следующего совпадения наибольшей подстроки внутри заданной строки. Относительный элемент rm_eo указывает на смещение конца совпадения, которое является первым символом после совпавшего текста.
Функция regerror используется для преобразования кодов ошибок, которые могут быть получены от regcomp() и regexec(), в строки сообщений об ошибках.
В regerror передаются: код ошибки errcode, буферный шаблон preg, указатель на символьный буфер строки errbuf и размер буфера строки errbuf_size. Функция возвращает размер errbuf, который требуется для сохранения сообщения об ошибке в виде строки, оканчивающейся null. Если и errbuf, и errbuf_size не равны нулю, то errbuf заполняется первыми errbuf_size - 1 символами сообщения об ошибке и завершается байтом null ('\0').
Функция regfree() освобождает память, отведённую буферному шаблону preg во время процесса компиляции с помощью regcomp().
Функция regcomp() возвращает ноль при успешной компиляции или в противном случае код ошибки.
Функция regexec() возвращает ноль при совпадении или REG_NOMATCH, если совпадений не было.
Функция regcomp() может возвращать следующие ошибки:
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
regcomp(), regexec() | Безвредность в нитях | MT-Safe locale |
regerror() | Безвредность в нитях | MT-Safe env |
regfree() | Безвредность в нитях | MT-Safe |
POSIX.1-2001, POSIX.1-2008.
Раздел руководства glibc Regular Expressions
2019-03-06 | GNU |