regcomp()

Составить регулярное выражение

Прототип:

#include <regex.h>
int regcomp( regex_t *preg,
const char *pattern,
int cflags );

Аргументы:

preg
Указатель на объект regex_t, где функция может хранить скомпилированное регулярное выражение.
pattern
Регулярное выражение, которое требуется скомпилировать.
cflags
Поразрядное ИЛИ, включающее ноль или более следующих флагов:
REG_EXTENDED
использовать расширенные регулярные выражения.
REG_ICASE
игнорировать различия в регистре.
REG_NEWLINE
рассматривать <newline> как обычный символ.
REG_NOSUB
сообщать только об успешном/неуспешном завершении regexec().

Библиотека:

libc

Описание:

Функция regcomp() подготавливает регулярное выражение preg для использования функцией regexec() из спецификации pattern и cflags. Член re_nsub в preg устанавливается равным количеству подвыражений в pattern.

Функции, которые работают с регулярными выражениями (regcomp(), regerror(), regexec(), и regfree()) поддерживают два класса регулярных выражений: Basic и Extended Regular. Эти классы строго определены в IEEE P1003.2, Regular Expression Notation.

Basic Regular Expressions

Основные регулярные выражения состоят из следующих элементов:

x$
x в конце строки ($ должен быть последним элементом).
^x
x в начале строки (^ должен быть первым элементом).
x*
Ноль или более вхождений x.
.
Любой одиночный символ (кроме <newline>).
c
Символ c.
xc
x и следующий за ним c.
cx
Символ c, за которым идет x.
[cd]
Символы c или d.
[c-d]
Все символы в диапазоне от c до d, включительно.
[^c]
Любой символ, кроме c.
[[:classname:]]
Любой из следующих классов:
alnum
alpha
cntrl
digit
graph
lower
print
punct
space
upper
xdigit
[[=c=]]
Все символы из того же класса эквивалентности, к которому принадлежит c.
[[=.=]]
Все мультисимвольные элементы.
x{m,n}
от m до n вхождений x.
\c
Символ c, даже если c является оператором.
\(x\)
Именованное подвыражение, x.
\m
Обнаружено mth подвыражение.
xy
Выражение x, за которым следует y.

__Расширенные регулярные выражения __

Расширенные регулярные выражения также включают:

x+
Одно или несколько вхождений x.
x?
Ноль или одно вхождение x.
(x)
Подвыражение x (для обработки приоритета).
x|y
Выражение x ИЛИ y.

Возвращаемое значение:

0
Успешное завершение.
≠0
Произошла ошибка (используйте regerror() для получения подробностей).

Примеры:

/*
* The following example prints out all lines
* from FILE "f" that match "pattern".
*/
#include <stdio.h>
#include <regex.h>
#include <limits.h>
#define BUFFER_SIZE 512
void grep( char *pattern, FILE *f )
{
int t;
regex_t re;
char buffer[BUFFER_SIZE];
if ( (t = regcomp( &re, pattern, REG_NOSUB )) != 0 )
{
regerror( t, &re, buffer, sizeof( buffer ) );
fprintf( stderr, "grep: %s (%s)\n", buffer, pattern );
return;
}
while ( fgets( buffer, BUFFER_SIZE, f ) != NULL )
{
if ( regexec( &re, buffer, 0, NULL, 0 ) == 0 )
{
fputs( buffer, stdout );
}
}
regfree( &re );
}

Классификация:

POSIX 1003.1

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Сведения об авторах:

Henry Spencer / Berkeley.

Тематические ссылки:

regerror(), regexec(), regfree()




Предыдущий раздел: Описание API системной библиотеки