u
int regcomp(regex_t *preg, const char *regex,int cflags);
u
int regexec(const regex_t *preg, const char *string,size_t nmatch, regmatch_t pmatch[],int eflags);
u
size_t regerror(int errcode,const regex_t *preg, char *errbuf,size_t errbuf_size); void regfree(regex_t *preg);
КОМПИЛИРОВАНИЕ РЕГУЛЯРНОГО ВЫРАЖЕНИЯ POSIX
regcomp
используется для обработки регулярного выражения
и придания ей формы, которая пригодна для последующих
regexec-поисков.
regcomp
поддерживается:
preg,
указателем на область хранения буферного шаблона;
regex,
указателем на заканчивающуюся null строку, и
cflags,
флагами, используемыми для определения типа обработки.
Все поиски регулярных выражений должны выполняться с помощью
обработанного буферного шаблона таким образом, чтобы
regexec
всегда поддерживалась адресом инициализированного функцией
regcomp
буферного шаблона.
cflags
являются поразрядным
ИЛИ
одного или нескольких выражений:
REG_EXTENDED
(использовать синтаксис расширенных регулярных рыражений
POSIX
во время интерпретации
regex.
Если не включен этот флаг, то
используется синтаксис простых регулярных выражений
POSIX.);
REG_ICASE
(не учитывать регистр. Последующие поиски
regexec
с использованием данного буферного шаблона не будут зависеть от регистра.);
REG_NOSUB
(не требовать поддержки адресации внутристрочных совпадений.
Параметры
nmatch
и
pmatch
для
regexec
игнорируются, если данный буферный шаблон был скомпилирован с
этим включенным флагом.);
REG_NEWLINE
(операторы любых символов не равны новой строке.
Список символов
([^...]),
содержащий новую строку, не просто совпадает с новой строкой.
Операторы сравнения по началу строк
(^)
принимают совпадение с пустой строкой сразу после начала строки
независимо от того, что
eflags,
флаг выполнения
regexec,
содержит
REG_NOTBOL.
Оператор конца линии
($)
считается равным пустой строке (до символа начала строки)
независимо от того, что
eflags
содержит
REG_NOTEOL.
СООТВЕТСТВИЕ РЕГУЛЯРНОГО ВЫРАЖЕНИЯ POSIX
regexec
используется для сравнения строки, завершающейся нулем, с предварительно
обработанным буферным шаблоном
preg.
nmatch
и
pmatch
используются для получения информации о
местонахождении любых совпадений.
eflags
может быть поразрядным
ИЛИ
одного из значений
REG_NOTBOL
и
REG_NOTEOL
или их обоих.
Данные значения определяют поведение процесса сравнения так, как описано ниже.
REG_NOTBOL
(не учитывается оператор начала новой строки
(но см. описанный выше флаг обработки
REG_NEWLINE).
Этот флаг может использоваться, когда в
regexec
обрабатываются отдельные части строк,
и начало таких частей в данном случае не должно
интерпретироваться как начало новой строки.);
REG_NOTEOL
(не учитывается оператор конца строки
(но см. описанный выше флаг обработки
REG_NEWLINE)).
BYTE OFFSETS
Если только
REG_NOSUB
не установлен для обработки буферного шаблона,
возможно получать информацию о положении внутристрочных совпадений.
pmatch
должно быть определено так, чтобы иметь, по крайней мере,
nmatch
элементов. Они заполняются
regexec-адресами
внутристрочных совпадений. Любые неиспользованные элементы
структуры будут содержать значение -1. Структура
regmatch_t,
являющаяся типом
pmatch,
определена в
regex.hследующимобразом:
Каждый элемент
rm_so,
не равный -1, показывает смещение начального совпадения наибольшей подстроки
внутри заданной строки. Относительный элемент
rm_eo
указывает на смещение конца совпадения.
СООБЩЕНИЕ ОБ ОШИБКАХ POSIX
regerror
используется для преобразования кодов ошибок,
которые могут быть получены от
regcomp
и
regexec,
в строки сообщений об ошибках. Через
regerror
проходят: код ошибки
errcode,
буферный шаблон
preg,
указатель на символьный буфер строки
errbuf
и размер буфера строки
errbuf_size.
Возвращается размер
errbuf,
который требуется для содержащейся строки, с сообщением об ошибке. Если и
errbuf,
и
errbuf_size
не равны нулю, то
errbuf
заполняется первыми
errbuf_size - 1-
символами сообщения об ошибке и завершаются нулем.
ВЫСВОБОЖДЕНИЕ БУФЕРА ШАБЛОНА POSIX
Предоставив
regfree
предварительно обработанный буферный шаблон,
preg
освободит память, отведенную этому шаблону во время процесса компиляции
regcomp.
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
regcomp
возвращает ноль при успешной компиляции или код ошибки при возникновении ошибок.
regexec
возвращает ноль при совпадениях или
REG_NOMATCH,
если совпадений не было.
НАЙДЕННЫЕ ОШИБКИ
regcomp
может возвращать следующие ошибки:
REG_BADRPT
(неправильное использование операторов повторения, таких, как
`*',
в качестве первых символов);
REG_BADBR
(неправильное использование операторов обратных ссылок);
REG_EBRACE
(неправильные операторы обработки количества скобок);
REG_EBRACK
(неправильные операторы списка скобок);
REG_ERANGE
(неправильное использование операторов области: в этом случае
конец области появляется прежде ее начала);
REG_ECTYPE
(неизвестное имя класса символов);
REG_ECOLLATE
(неправильная сортировка элементов);
REG_EPAREN
(неправильные операторы групп скобок);
REG_ESUBREG
(неправильная обратная ссылка на подвыражение);
REG_EEND
(ошибка не определена в POSIX.2);
REG_EESCAPE
(конечная обратная косая черта);
REG_BADPAT
(неправильное использование операторов шаблона, таких, как операторы
группы или списка);
REG_ESIZE
(скомпилированное регулярное выражение требует буферный шаблон
размером, большим 64 Кб. Это не определено в POSIX.2);
REG_ESPACE
(для процедур регулярных выражений закончилась память).