Голословный reg comp php. Man regcomp (3): функции регулярных выражений POSIX. Сообщение об ошибках POSIX
ereg
ereg -- парное значение регулярного выраженияОписание
int ereg (string pattern, string string, array );Ищет парные значения string в регулярном выражении, указанном в pattern .
Если парные значения найдены для подстрок в круглых скобках pattern и функция вызывалась с третьим аргументом regs , то парные значения будут сохранены в элементах regs . $regs будет содержать подстроку, которая начинается с первой левой круглой скобки; $regs будет содержать подстроку, начинающуюся со второй скобки и т.д. $regs будет содержать копию string .
Поиск чуствителен к регистру.
Функция возвращает true, если парное значение для pattern было найдено в string, или false, если не было найдено парных значений или произошла ошибка.
Следующий код извлекает дату в ISO формате и выводит в формате DD.MM.YYYY:
Example 1. ereg() example If (ereg("({4})-({1,2})-({1,2})", $date, $regs)) { echo "$regs.$regs.$regs"; } else { echo "Invalid date format: $date"; } |
ereg_replace
ereg_replace -- заменяет регулярное выражениеОписание
string ereg_replace (string pattern, string replacement, string string);Эта функция сканирует string на парные значения к pattern , затем заменяет найденный текст на replacement .
Если pattern содержит подстроки в круглых скобках, то replacement может содержать подстроки вида \\ цифра , которые будут заменены текстом, совпадающим с цифровой подстрокой в скобках; \\0 обработает все содержимое строки. Может быть использовано до 9 подстрок. Скобки могут быть сгруппированы, в этом случае они считаются по открывающим скобкам. Например, следующий код напечатет "This was a test" три раза:
Пример 1. ereg_replace() $string = "This is a test"; echo ereg_replace(" is", " was", $string); echo ereg_replace("()is", "\\1was", $string); echo ereg_replace("(()is)", "\\2was", $string); |
eregi
eregi -- нечувствительный к регистру поиск парных значений в регулярных выраженияхОписание
int eregi (string pattern, string string, array );eregi_replace
eregi_replace -- замена регулярного выражения без учета регистраОписание
string eregi_replace (string pattern, string replacement, string string);split
split -- разбивает строку на массив по регулярному выражениюОписание
array split (string pattern, string string, int );Возвращает массив строк, каждая из которых является подстрокой строки, образованные разбитием этой строки на части, отделенные друг от друга pattern . Если произойдет ошибка, функция вернет false.
Для получения первых 5 полей из строки в /etc/passwd:
Будет выдано .Эта функция может быть использована организации нечувствительного к регистру сравнения в продуктах, которые поддерживают только чувстуительные к регистру выражения.
Для работы с регулярными выражениями в С/С++ создана библиотека regex.h. В ней предопределены основные функцкии:
#include
Функция regcomp
предназначена для компиляции регулярного выражения. Эта функция компилирует регулярное выражение pattern учитывая флаги cflags и помещает его в структуру preg.
Флаги могут быть составлены как побитовое или следующих элементов:
- REG_EXTENDED - использовать расширенные регулярные выражения
- REG_ICASE - не различать заглавные и строковые буквы при сопоставлении строки с регулярным выражением
Функция regexec сопоставляет регулярное выражение скомпилированное и помещённое в структуру preg со строкой string. При этом в случае успешного сопоставления возвращается нулевое значение, в протичном случае - код ошибки. Аргумент eflags - побитовое ИЛИ REG_NOTBOL и REG_NOTEOL. Они определяет, являются ли границы цепочки границами строки (для обработки фиксаторов ^ и $). Если аргумент nmatch равен нулю, то pmatсh игнорируется, иначе он должен указывать на массив nmatch элементов, который будет заполнен смещениями подцепочек.
Для расшифровки ошибок используется функция regerror() . Она преобразует errcode возвращённый сопоставлением регулярного выражения и строки и помещает строковое значение ошибки в переменную errbuf, при этом следует указывать её размер.
Функция regfree() освобождает память запрошенную при компилировании регулярного выражения. Указатель на структуру регулярного выражения использовать после этого нельзя...
Рассмотрим пример:
#include
Эта функция - простейшая функция для распознания IP адреса. При помощи директивы define мы предоприделили строку с регулярным выражением и строку для проверки. В главной функции прежде всего компилируется регулярное выражение PATTERN и помещается в структуру preg. Сразу проверяем наличие ошибок и если они есть, выводим на экран. После этого сравниваем строку STRING с регулярным выражением в preg. В случае совпадения выводим "true", в противном случае - "false" и расшифровуем ошибку при помощи regerror.
Format
#includeGeneral description
Compiles the regular expression specified by pattern into an executable string of op-codes.
preg is a pointer to a compiled regular expression.
pattern is a pointer to a character string defining a source regular expression (described below).
cflags is a bit flag defining configurable attributes of compilation process: REG_EXTENDED Support extended regular expressions. REG_ICASE Ignore case in match. REG_NEWLINE Eliminate any special significance to the newline character. REG_NOSUB Report only success or fail in regexec(), that is, verify the syntax of a regular expression. If this flag is set, the regcomp() function sets re_nsub to the number of parenthesized sub-expressions found in pattern . Otherwise, a sub-expression results in an error.
The regcomp() function under z/OS XL C/C++ will use the definition of characters according to the current LC_SYNTAX category. The characters, [ , ] , { , } , | , ^ , and $ , have varying code points in different encoded character sets.
Regular expressions
The functions regcomp(), regerror(), regexec(), and regfree() use regular expressions in a similar way to the UNIX awk, ed, grep, and egrep commands.
The simplest form of regular expression is a string of characters with no special meaning. The following characters do have special meaning; they are used to form extended regular expressions: Symbol Description . The period symbol matches any one character except the terminal newline character. [character –character ] The hyphen symbol, within square brackets, means “through”. It fills in the intervening characters according to the current collating sequence. For example, can be equivalent to or, with a different collating sequence, it can be equivalent to . [string ] A string within square brackets specifies any of the characters in string . Thus , if compared to other strings, would match any that contained a, b, or c.
No assumptions are made at compile time about the actual characters contained in the range.
{m } {m ,} {m ,u } Integer values enclosed in {} indicate the number of times to apply the preceding regular expression. m is the minimum number, and u is the maximum number. u must not be greater than RE_DUP_MAX (see limits.h).If you specify only m , it indicates the exact number of times to apply the regular expression. {m ,} is equivalent to {m,u }. They both match m or more occurrences of the expression.
* The asterisk symbol indicates 0 or more of any characters. For example, [ a*e ] is equivalent to any of the following: 99ae9, aaaaae, a999e99. $ The dollar symbol matches the end of the string. (Use \n to match a newline character.) character + The plus symbol specifies one or more occurrences of a character. Thus, smith+ern is equivalent to, for example, smithhhern . [^string ] The caret symbol, when inside square brackets, negates the characters within the square brackets. Thus [^abc] , if compared to other strings, would fail to match any that contains even one a, b, or c. (expression )$n Stores the value matched by the enclosed regular expression in the (n +1) th ret parameter. Ten enclosed regular expressions are allowed. Assignments are made unconditionally. (expression ) Groups a sub-expression allowing an operator, such as *, +, or .], to work on the sub-expression enclosed in parentheses. For example, (a*(cb+)*)$0 .
Note:
- Do not use multibyte characters.
- You can use the ] (right square bracket) alone within a pair of square brackets, but only if it immediately follows either the opening left square bracket or if it immediately follows [^. For example: –] matches the ] and – characters.
- All the preceding symbols are special . You precede them with \ to use the symbol itself. For example, a\.e is equivalent to a.e .
- You can use the – (hyphen) by itself, but only if it is the first or last character in the expression. For example, the expression --0] matches either the ] or else the characters – through 0. Otherwise, use \–.
Returned value
If successful, regcomp() returns 0.
If unsuccessful, regcomp() returns nonzero, and the content of preg is undefined.
Example
CELEBR07
⁄* CELEBR07
This example compiles an extended regular expression.
*⁄
#include
#include
#include
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
);
ОПИСАНИЕ
Компилирование регулярных выражений POSIX
Функция regcomp () используется для компиляции регулярного выражения в формат, который подходит для последующих поисков с помощью regexec ().regcomp () передаётся указатель на область хранения буферного шаблона preg , указатель на заканчивающуюся null строку regex и флаги cflags , используемые для определения типа компиляции.
Все поиски регулярных выражений должны выполняться с помощью скомпилированного буферного шаблона, поэтому regexec () должна всегда вызываться с адресом буферного шаблона, инициализированного функцией regcomp ().
Значение cflags может состоять из поразрядного or нуля или нескольких следующих значений:
REG_EXTENDED Использовать синтаксис расширенных регулярных выражений POSIX во время интерпретации regex . Если не включён этот флаг, то используется синтаксис простых регулярных выражений POSIX. REG_ICASE Не учитывать регистр. Последующие поиски regexec () с использованием данного буферного шаблона не будут зависеть от регистра. REG_NOSUB Не сообщать положение совпадений. Параметры nmatch и pmatch для regexec () игнорируются, если данный буферный шаблон был скомпилирован с этим включённым флагом. REG_NEWLINE Операторы совпадения с любым символом не совпадают с символом новой строки.Список несовпадающих символов ([^...] ) без символа новой строки не совпадает с новой строкой.
Оператор сравнения по началу строки (^ ) совпадает с пустой строкой сразу после новой строки независимо от того, что eflags , флаги выполнения regexec (), содержат REG_NOTBOL .
Оператор сравнения по концу строки ($) совпадает с пустой строкой до символа начала строки независимо от того, что eflags содержит REG_NOTEOL .
Сравнение с регулярным выражением POSIX
Функция regexec () используется для сравнения строки, завершающейся null, с предварительно обработанным буферным шаблоном preg . Аргументы nmatch и pmatch используются для предоставления информации о местонахождении любых совпадений. Значение eflags может быть поразрядным ИЛИ одного или обоих значений REG_NOTBOL и REG_NOTEOL . Данные значения определяют поведение процесса сравнения так, как описано ниже. REG_NOTBOL Оператор сравнения по началу строки всегда завершается с ошибкой (но смотрите описанный выше флаг компиляции REG_NEWLINE ). Этот флаг может использоваться, когда в regexec () передаются отдельные части строки, и начало такой строки в данном случае не должно интерпретироваться как начало новой строки. REG_NOTEOL Оператор сравнения по концу строки всегда завершается с ошибкой (но смотрите описанный выше флаг компиляции REG_NEWLINE ).Байтовые смещения
Если REG_NOSUB не установлен при компиляции буферного шаблона, то возможно получать информацию о положении совпадений. Значение pmatch должно быть определено так, чтобы иметь, по крайней мере, nmatch элементов. Они заполняются regexec () адресами внутристрочных совпадений. Смещения подвыражения, начинающегося с i -й открытой скобки, сохраняется в pmatch[i] . Адрес совпадения всего регулярного выражения сохраняется в pmatch (заметим, что чтобы вернуть смещения совпадений N подвыражений, значение nmatch должно быть не менее N+1 ). Любые неиспользованные элементы структуры будут содержать значение -1.Структура regmatch_t
, являющаяся типом pmatch
, определена в
Typedef struct { regoff_t rm_so; regoff_t rm_eo; } regmatch_t;
Каждый элемент rm_so , не равный -1, показывает начальное смещение следующего совпадения наибольшей подстроки внутри заданной строки. Относительный элемент rm_eo указывает на смещение конца совпадения, которое является первым символом после совпавшего текста.
Сообщение об ошибках POSIX
Функция regerror используется для преобразования кодов ошибок, которые могут быть получены от regcomp () и regexec (), в строки сообщений об ошибках.В regerror передаются: код ошибки errcode , буферный шаблон preg , указатель на символьный буфер строки errbuf и размер буфера строки errbuf_size . Функция возвращает размер errbuf , который требуется для сохранения сообщения об ошибке в виде строки, оканчивающейся null. Если и errbuf , и errbuf_size не равны нулю, то errbuf заполняется первыми errbuf_size - 1 символами сообщения об ошибке и завершается байтом null ("\0").
Освобождение буфера шаблона POSIX
Функция regfree () освобождает память, отведённую буферному шаблону preg во время процесса компиляции с помощью regcomp ().ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция regcomp () возвращает ноль при успешной компиляции или в противном случае код ошибки.Функция regexec () возвращает ноль при совпадении или REG_NOMATCH , если совпадений не было.