Аляпуватий reg comp php. Man regcomp (3): функції регулярних виразів POSIX. Повідомлення про помилки POSIX

#include
#include
int regcomp(regex_t *preg, const char *regex, intcflags);
int regexec(const regex_t *preg, const char *string, size_tnmatch,
regmatch_tpmatch, inteflags);
size_t regerror(interrcode, const regex_t *preg, char *errbuf,
size_terrbuf_size);
void regfree (regex_t *preg);

ОПИС

Компілювання регулярних виразів POSIX

Функція regcomp() використовується для компіляції регулярного вираження у формат, який підходить для подальших пошуків за допомогою regexec().

regcomp() передається вказівник на область зберігання буферного шаблону preg, покажчик на рядок, що закінчується 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якщо збігів не було.

ПОМИЛКИ

Функція regcomp() може повертати такі помилки: REG_BADBRНеправильне використання оператора зворотних посилань. REG_BADPATНеправильне використання операторів шаблону, наприклад операторів групи або списку. REG_BADRPTНеправильне використання операторів повторення, наприклад, використання «*» як перший символ. REG_EBRACEНепарні дужки в операторах інтервалу. REG_EBRACKНепарні квадратні дужки операторів списку. REG_ECOLLATEНеправильний елемент сортування. REG_ECTYPEНевідоме ім'я класу символи. REG_EENDПотенційна помилка. Не визначено у POSIX.2. REG_EESCAPEКінцева зворотна коса характеристика. REG_EPARENНепарні круглі дужки в операторах угруповання. REG_ERANGEНеправильне використання оператора області: наприклад, кінець області з'являється раніше її початку. REG_ESIZEСкомпільований регулярний вираз вимагає буферний шаблон розміром 64 Кб. Це не визначено у POSIX.2. REG_ESPACEДля процедур регулярних виразів закінчилась пам'ять. REG_ESUBREGНеправильне зворотне посилання на вираз.

> 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);

Description

POSIX regex compiling regcomp() Використовується для забезпечення регулярного exprese в формі, що є додатковим для subsequent regexec() searches.

regcomp() is supplied with preg, a pointer to a pattern buffer storage area; regex, a pointer to the null-terminated string and cflags, flags used to determine the type of compilation.

All regular expression searching must be done via a compiled pattern buffer, thus regexec() must always be supplied with the address of a regcomp() initialized pattern buffer.

cflags may be the bitwise- or of one or more of the following: REG_EXTENDED Use POSIXРозширений Regular Expression syntax коли interpreting regex. If not set, POSIX Basic Regular Expression syntax is used. REG_ICASE Do no differentiate case. Subsequent regexec() searches using this pattern buffer will be case insensitive. REG_NOSUB Do not report position of matches. The nmatch and pmatch arguments to regexec() є ignored if the pattern buffer supplied was compiled with this flag set. REG_NEWLINE Match-any-character operators don't match a newline.

A nonmatching list ( [^...] ) not containing a newline does not match a newline.

Match-beginning-of-line operator ( ^ ) Matches empty string immediately after a newline, regardless of whether eflags, execution flags of regexec(), contains REG_NOTBOL.

Match-end-of-line operator ( $ ) Matches the empty string immediately before a newline, regardless of whether eflags contains REG_NOTEOL.

POSIX regex matching regexec() is used to match a null-terminated string against the precompiled pattern buffer, preg. nmatch and pmatchВикористовується для забезпечення інформації, що гарантує місце розташування будь-яких матчів. eflags may be the bitwise- or of one or both of REG_NOTBOL and REG_NOTEOLякі спричиняють зміни в матчі ходу, описані нижче. REG_NOTBOL The match-beginning-of-line оператор будь-яких fails to match (but see the compilation flag REG_NEWLINE above) Цей флаг може бути використаний при різних партіях з string є passed to regexec() and beginning of the string should not be interpreted as the beginning of the line. REG_NOTEOL Match-end-of-line оператор будь-якої пісні до матчу (but see the compilation flag REG_NEWLINE above)

Byte offsets Unless REG_NOSUBбув налаштований для копіювання pattern buffer, це може бути додатковим match addressing information. pmatch Must be dimensioned to have at least nmatchелементів. These are filled in by regexec() with substring match addresses. offsets of the subexpression starting at the i th open parenthesis are stored in pmatch[i]. Натисніть на регулярний expresion's match addresses are stored in pmatch. (Note that to return the offsets of N subexpression матчі, nmatch must be at least N+1.) Any unused structure elements will contain the value -1.

The regmatch_t structure which is the type of pmatch is defined in .

Typedef struct ( regoff_t rm_so; regoff_t rm_eo; ) regmatch_t; rm_so Each rm_eo element that is not -1 indicates the start offset of the next largest substring match within the string. The relative

element indicates the end offset of the match, which is the offset of the first character after the matching text. regerror POSIX error reporting regcomp() is used to turn the error codes that can be returned by both regexec() and

regerror() в error message strings. errcode() is passed the error code, preg, the pattern buffer, errbuf, a pointer to a character string buffer, errbuf_size, і розмір string buffer, errbuf. It returns the size of the errbuf and errbuf_size required to contain the null-terminated error message string. If both errbufє nonzero, errbuf_size - 1 is filled in with the first

Characters of error message and terminating null byte ("\0"). POSIX pattern buffer freeing regfree Supplying preg() with a precompiled pattern buffer, regcomp().

will free the memory located to the pattern buffer by the compiling process,

regcomp Return Value

regexec() returns zero for successful compilation або error code for failure. REG_NOMATCH() returns zero for a successful match or

for failure.

Errors regcomp(): REG_BADBR The following errors can be returned by REG_BADPATНеможливо використовувати back reference operator. REG_BADRPTНеможливо використовувати pattern operators так, як група або лист. REG_EBRACEУ неправильному використанні repetition operators таке як "*" як перший характер. REG_EBRACK Un-matched brace interval operators. REG_ECOLLATE Un-matched bracket list operators. REG_ECTYPE Invalid collating element. REG_EEND Unknown character class name. REG_EESCAPEНеконкретний error. Це не визначено POSIX.2. REG_EPAREN Trailing backslash. REG_ERANGE Un-matched parenthesis group operators. REG_ESIZE Compiled regular expression requires pattern buffer larger than 64Kb. Це не визначено POSIX.2. REG_ESPACE Regex routines ran out of memory. REG_ESUBREG Invalid back reference to a subexpression.

> int regcomp(regex_t *preg, const char *regex, intcflags); int regexec(const regex_t *preg, const char *string, size_tnmatch, regmatch_tpmatch, inteflags); size_t regerror(interrcode, const regex_t *preg, char *errbuf, size_terrbuf_size); void regfree (regex_t *preg);

ОПИС

Компілювання регулярних виразів POSIX

Функція regcomp() використовується для компіляції регулярного вираження у формат, який підходить для наступних пошуків за допомогою regexec().

regcomp() передається вказівник на область зберігання буферного шаблону preg, покажчик на рядок, що закінчується 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(aq\0aq).

Вивільнення буфера шаблону POSIX

Функція regfree() звільняє пам'ять, відведену буферному шаблону pregпід час процесу компіляції за допомогою regcomp().

ПОВЕРНЕНИЙ ЗНАЧЕННЯ

Функція regcomp() повертає нуль при успішній компіляції або в іншому випадку код помилки.

Функція regexec() повертає нуль при збігу або REG_NOMATCH, якщо збігів не було.

ПОМИЛКИ

Функція regcomp() може повертати такі помилки: REG_BADBRНеправильне використання оператора зворотних посилань. REG_BADPATНеправильне використання операторів шаблону, таких як оператори групи або списку. REG_BADRPTНеправильне використання операторів повторення, наприклад, використання «*» як перший символ. REG_EBRACEНепарні дужки в операторах інтервалу. REG_EBRACKНепарні квадратні дужки операторів списку. REG_ECOLLATEНеправильний елемент сортування. REG_ECTYPEНевідоме ім'я класу символи. REG_EENDПотенційна помилка. Не визначено у POSIX.2. REG_EESCAPEКінцева зворотна коса характеристика. REG_EPARENНепарні круглі дужки в операторах угруповання. REG_ERANGEНеправильне використання оператора області: наприклад, кінець області з'являється раніше її початку. REG_ESIZEСкомпільований регулярний вираз вимагає буферний шаблон розміром, більшим за 64 Кб. Це не визначено у POSIX.2. REG_ESPACEДля процедур регулярних виразів закінчилась пам'ять. REG_ESUBREGНеправильне зворотне посилання на вираз. Зміст

ereg

ereg - парне значення регулярного вираження
Опис
int ereg (string pattern, string string, array);

Шукає парні значення stringу регулярному вираженні, зазначеному в pattern .

Якщо парні значення знайдені для підстрок у круглих дужках patternта функція викликалася з третім аргументом regs, то парні значення будуть збережені в елементах regs. $regs буде містити підрядок, який починається з першої лівої круглої дужки; string .

$regs буде містити підрядок, що починається з другої дужки і т.д. $regs міститиме копію

Функція повертає 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:

Буде видано.

Ця функція може бути використана для організації нечутливого до регістру порівняння в продуктах, які підтримують тільки чутливі до регістру вирази.