.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (C), 1995, Graeme W. Wilford. (Wilf.) .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Wed Jun 14 16:10:28 BST 1995 Wilf. (G.Wilford@ee.surrey.ac.uk) .\" Tiny change in formatting - aeb, 950812 .\" Modified 8 May 1998 by Joseph S. Myers (jsm28@cam.ac.uk) .\" .\" show the synopsis section nicely .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH REGEX 3 "15 декабря 2022 г." "Linux man\-pages 6.02" .SH ИМЯ regcomp, regexec, regerror, regfree \- функции регулярных выражений POSIX .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBint regcomp(regex_t *restrict \fP\fIpreg\fP\fB, const char *restrict \fP\fIregex\fP\fB,\fP \fB int \fP\fIcflags\fP\fB);\fP \fBint regexec(const regex_t *restrict \fP\fIpreg\fP\fB, const char *restrict \fP\fIstring\fP\fB,\fP \fB size_t \fP\fInmatch\fP\fB, regmatch_t \fP\fIpmatch\fP\fB[restrict .\fP\fInmatch\fP\fB],\fP \fB int \fP\fIeflags\fP\fB);\fP .PP \fBsize_t regerror(int \fP\fIerrcode\fP\fB, const regex_t *restrict \fP\fIpreg\fP\fB,\fP \fB char \fP\fIerrbuf\fP\fB[restrict .\fP\fIerrbuf_size\fP\fB], size_t \fP\fIerrbuf_size\fP\fB);\fP \fBvoid regfree(regex_t *\fP\fIpreg\fP\fB);\fP .fi .SH ОПИСАНИЕ .SS "Компилирование регулярных выражений POSIX" Функция \fBregcomp\fP() используется для компиляции регулярного выражения в формат, который подходит для последующих поисков с помощью \fBregexec\fP(). .PP \fBregcomp\fP() передаётся указатель на область хранения буферного шаблона \fIpreg\fP, указатель на заканчивающуюся null строку \fIregex\fP и флаги \fIcflags\fP, используемые для определения типа компиляции. .PP All regular expression searching must be done via a compiled pattern buffer, thus \fBregexec\fP() must always be supplied with the address of a \fBregcomp\fP()\-initialized pattern buffer. .PP \fIcflags\fP is the bitwise\-\fBor\fP of zero or more of the following: .TP \fBREG_EXTENDED\fP Использовать синтаксис расширенных регулярных выражений POSIX во время интерпретации \fIregex\fP. Если не включён этот флаг, то используется синтаксис простых регулярных выражений POSIX. .TP \fBREG_ICASE\fP Не учитывать регистр. Последующие поиски \fBregexec\fP() с использованием данного буферного шаблона не будут зависеть от регистра. .TP \fBREG_NOSUB\fP Не сообщать положение совпадений. Параметры \fInmatch\fP и \fIpmatch\fP для \fBregexec\fP() игнорируются, если данный буферный шаблон был скомпилирован с этим включённым флагом. .TP \fBREG_NEWLINE\fP Операторы совпадения с любым символом не совпадают с символом новой строки. .IP A nonmatching list (\fB[\(ha...]\fP) not containing a newline does not match a newline. .IP Match\-beginning\-of\-line operator (\fB\(ha\fP) matches the empty string immediately after a newline, regardless of whether \fIeflags\fP, the execution flags of \fBregexec\fP(), contains \fBREG_NOTBOL\fP. .IP Оператор сравнения по концу строки ($) совпадает с пустой строкой до символа начала строки независимо от того, что \fIeflags\fP содержит \fBREG_NOTEOL\fP. .SS "Сравнение с регулярным выражением POSIX" \fBregexec\fP() is used to match a null\-terminated string against the precompiled pattern buffer, \fIpreg\fP. \fInmatch\fP and \fIpmatch\fP are used to provide information regarding the location of any matches. \fIeflags\fP is the bitwise\-\fBor\fP of zero or more of the following flags: .TP \fBREG_NOTBOL\fP Оператор сравнения по началу строки всегда завершается с ошибкой (но смотрите описанный выше флаг компиляции \fBREG_NEWLINE\fP). Этот флаг может использоваться, когда в \fBregexec\fP() передаются отдельные части строки, и начало такой строки в данном случае не должно интерпретироваться как начало новой строки. .TP \fBREG_NOTEOL\fP Оператор сравнения по концу строки всегда завершается с ошибкой (но смотрите описанный выше флаг компиляции \fBREG_NEWLINE\fP). .TP \fBREG_STARTEND\fP Использовать \fIpmatch[0]\fP на входной строке начиная с байта \fIpmatch[0].rm_so\fP и заканчивая перед байтом \fIpmatch[0].rm_eo\fP. Это позволяет искать встроенные байты NUL и избегать выполнения \fBstrlen\fP(3) для длинных строк. Здесь не используется \fInmatch\fP на входных данных и не изменяется обработка \fBREG_NOTBOL\fP или \fBREG_NEWLINE\fP. Этот флаг является расширением BSD и отсутствует в POSIX. .SS "Байтовые смещения" Если \fBREG_NOSUB\fP не установлен при компиляции буферного шаблона, то возможно получать информацию о положении совпадений. Значение \fIpmatch\fP должно быть определено так, чтобы иметь, по крайней мере, \fInmatch\fP элементов. Они заполняются \fBregexec\fP() адресами внутристрочных совпадений. Смещения подвыражения, начинающегося с \fIi\fP\-й открытой скобки, сохраняется в \fIpmatch[i]\fP. Адрес совпадения всего регулярного выражения сохраняется в \fIpmatch[0]\fP (заметим, что чтобы вернуть смещения совпадений \fIN\fP подвыражений, значение \fInmatch\fP должно быть не менее \fIN+1\fP). Любые неиспользованные элементы структуры будут содержать значение \-1. .PP Структура \fIregmatch_t\fP, являющаяся типом \fIpmatch\fP, определена в \fI\fP: .PP .in +4n .EX typedef struct { regoff_t rm_so; regoff_t rm_eo; } regmatch_t; .EE .in .PP Каждый элемент \fIrm_so\fP, не равный \-1, показывает начальное смещение следующего совпадения наибольшей подстроки внутри заданной строки. Относительный элемент \fIrm_eo\fP указывает на смещение конца совпадения, которое является первым символом после совпавшего текста. .SS "Сообщение об ошибках POSIX" Функция \fBregerror\fP используется для преобразования кодов ошибок, которые могут быть получены от \fBregcomp\fP() и \fBregexec\fP(), в строки сообщений об ошибках. .PP В \fBregerror\fP передаются: код ошибки \fIerrcode\fP, буферный шаблон \fIpreg\fP, указатель на символьный буфер строки \fIerrbuf\fP и размер буфера строки \fIerrbuf_size\fP. Функция возвращает размер \fIerrbuf\fP, который требуется для сохранения сообщения об ошибке в виде строки, оканчивающейся null. Если и \fIerrbuf\fP, и \fIerrbuf_size\fP не равны нулю, то \fIerrbuf\fP заполняется первыми \fIerrbuf_size \- 1\fP символами сообщения об ошибке и завершается байтом null (\(aq\e0\(aq). .SS "Освобождение буфера шаблона POSIX" Функция \fBregfree\fP() освобождает память, отведённую буферному шаблону \fIpreg\fP во время процесса компиляции с помощью \fBregcomp\fP(). .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" Функция \fBregcomp\fP() возвращает ноль при успешной компиляции или в противном случае код ошибки. .PP Функция \fBregexec\fP() возвращает ноль при совпадении или \fBREG_NOMATCH\fP, если совпадений не было. .SH ОШИБКИ Функция \fBregcomp\fP() может возвращать следующие ошибки: .TP \fBREG_BADBR\fP Неправильное использование оператора обратных ссылок. .TP \fBREG_BADPAT\fP Неправильное использование операторов шаблона, таких, как операторы группы или списка. .TP \fBREG_BADRPT\fP Неправильное использование операторов повторения, например, использование «*» в качестве первого символа. .TP \fBREG_EBRACE\fP Непарные скобки в операторах интервала. .TP \fBREG_EBRACK\fP Непарные квадратные скобки в операторах списка. .TP \fBREG_ECOLLATE\fP Неправильный элемент сортировки. .TP \fBREG_ECTYPE\fP Неизвестное имя класса символов. .TP \fBREG_EEND\fP Потенциальная ошибка. Не определена в POSIX.2. .TP \fBREG_EESCAPE\fP Конечная обратная косая черта. .TP \fBREG_EPAREN\fP Непарные круглые скобки в операторах группировки. .TP \fBREG_ERANGE\fP Неправильное использование оператора области: например, конец области появляется прежде её начала. .TP \fBREG_ESIZE\fP Скомпилированное регулярное выражение требует буферный шаблон размером, большим 64\ Кб. Это не определено в POSIX.2. .TP \fBREG_ESPACE\fP Для процедур регулярных выражений закончилась память. .TP \fBREG_ESUBREG\fP Неправильная обратная ссылка на подвыражение. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .ad l .nh .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ \fBregcomp\fP(), \fBregexec\fP() T} Безвредность в нитях MT\-Safe locale T{ \fBregerror\fP() T} Безвредность в нитях MT\-Safe env T{ \fBregfree\fP() T} Безвредность в нитях MT\-Safe .TE .hy .ad .sp 1 .SH СТАНДАРТЫ POSIX.1\-2001, POSIX.1\-2008. .SH ПРИМЕРЫ .EX #include #include #include #include #define ARRAY_SIZE(arr) (sizeof((arr)) / sizeof((arr)[0])) static const char *const str = "1) John Driverhacker;\en2) John Doe;\en3) John Foo;\en"; static const char *const re = "John.*o"; int main(void) { static const char *s = str; regex_t regex; regmatch_t pmatch[1]; regoff_t off, len; if (regcomp(®ex, re, REG_NEWLINE)) exit(EXIT_FAILURE); printf("String = \e"%s\e"\en", str); printf("Matches:\en"); for (unsigned int i = 0; ; i++) { if (regexec(®ex, s, ARRAY_SIZE(pmatch), pmatch, 0)) break; off = pmatch[0].rm_so + (s \- str); len = pmatch[0].rm_eo \- pmatch[0].rm_so; printf("#%zu:\en", i); printf("offset = %jd; length = %jd\en", (intmax_t) off, (intmax_t) len); printf("substring = \e"%.*s\e"\en", len, s + pmatch[0].rm_so); s += pmatch[0].rm_eo; } exit(EXIT_SUCCESS); } .EE .SH "СМ. ТАКЖЕ" \fBgrep\fP(1), \fBregex\fP(7) .PP Раздел руководства glibc \fIRegular Expressions\fP .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан aereiae , Azamat Hackimov , Dmitriy S. Seregin , Katrin Kutepova , Lockal , Yuri Kozlov , Баринов Владимир и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .