PCRE (Perl Compatible Regular Expressions) — бібліотека, що реалізує роботу регулярних виразів у стилі Perl (з деякими відмінностями). Синтаксис регулярних виразів PCRE значно потужніший і гнучкіший, ніж стандартних регулярних виразів POSIX.
Тип | Бібліотека регулярних виразів |
---|---|
Розробник | d |
Стабільний випуск | 8.41 (2017-07-05) |
Операційна система | кросплатформна |
Мова програмування | C |
Ліцензія | BSD |
Онлайн-документація | pcre2project.github.io/pcre2/doc/html/index.html(англ.) pcre.org/current/doc/html/index.html(англ.) |
Репозиторій | github.com/PCRE2Project/pcre2 |
Вебсайт | pcre.org |
У тому чи іншому вигляді доступна для дуже багатьох мов програмування. Зокрема, в PHP модуль PCRE включений в ядро.
Автор бібліотеки — (Philip Hazel). Бібліотека написана на Сі й розповсюджується під вільною ліцензією BSD.
Функції бібліотеки
Базові функції
pcre *pcre_compile(const char *pattern, int options, const char **errptr, int *erroffset, const unsigned char *tableptr);
Функція pcre_compile компілює регулярний вираз у внутрішнє представлення бібліотеки. Перший аргумент — посилання на рядок, що містить регулярний вираз. У другому можна вказати різні атрибути (які відповідають опціям /igms… в Perl). Останній аргумент — посилання на таблицю кодування, створену pcre_maketables. Якщо під час компіляції шаблону сталася помилка, повертає NULL.
int pcre_exec(const pcre *code, const pcre_extra *extra, const char *subject, int length, int startoffset, int options, int *ovector, int ovecsize);
Функцію pcre_exec використовують для пошуку збігів. У першому аргументі передають значення, повернене pcre_compile. У другому — додаткові відомості, повернуті функцією pcre_study. Наступні три аргументи — аналізований рядок, його довжина та зміщення, починаючи з якого буде оброблятися рядок. Потім — параметр, який вказує опції (їхній докладний опис див. у документації).
В останніх двох аргументах потрібно вказати посилання на зарезервований масив цілих чисел і його довжину. У цей масив заносяться пари індексів, що вказують на початок і кінець збігів. Перші два елементи масиву описують положення всього виразу, що збігся. Інші пари — положення підрядків, які збіглися з виразами в круглих дужках у шаблоні (аналоги змінних виду $1 у Perl).
pcre_extra *pcre_study(const pcre *code, int options, const char **errptr);
Функція прискорює роботу програми, що виконує множину зіставлень з одним і тим самим шаблоном. Створює змінну, яка зберігає додаткові відомості про шаблон, які прискорюють його обробку функцією pcre_exec
const unsigned char *pcre_maketables(void);
Створює таблицю символів для використання її функцією pcre_compile
Добування підрядків
int pcre_copy_substring(const char *subject, int *ovector, int stringcount, int stringnumber, char *buffer, int buffersize);
int pcre_get_substring(const char *subject, int *ovector, int stringcount, int stringnumber, const char **stringptr);
Отримує з рядка один із знайдених підрядків. Для цього вказується номер знайденого підрядка. Ці функції відрізняються одна від одної тим, що pcre_copy_substring записує результат у буфер, якому вже виділена пам'ять, а pcre_get_substring виділяє пам'ять для буфера й записує в нього результат.
Перші чотири параметри в зазначених функціях однакові: перший — рядок, в якому проводився пошук, другий — масив, створений функцією pcre_exec, третій — значення, повернуте функцією pcre_exec, тобто кількість знайдених підрядків, четвертий — номер потрібного підрядка.
Функції повертають довжину підрядка в разі успіху, в іншому випадку — від'ємне значення — код помилки
int pcre_get_substring_list(const char *subject, int *ovector, int stringcount, const char ***listptr);
Отримує з рядка всі знайдені підрядки.
void pcre_free_substring(const char *stringptr);
void pcre_free_substring_list(const char **stringptr);
Звільняють пам'ять, виділену, відповідно, pcre_get_substring і pcre_get_substring_list.
POSIX-сумісні
У PCRE також реалізовані функції роботи з регулярними виразами, сумісні зі стандартом POSIX. Ці функції можна використовувати для обробки рядків у кодуванні, що відрізняється від базової ASCII:
int regcomp(regex_t *preg, const char *pattern, int cflags); int regexec(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);
Функція regerror перетворює код помилки, що повертається функціями regcomp і regexec, у повідомлення про помилку. Перший параметр — код помилки. Другий — скомпільований шаблон. Третій — рядок, в який буде записано повідомлення. Четвертий — його довжина.
Функція regfree звільняє змінну, що зберігає скомпільований шаблон, яка передається як параметр. Застосовується, коли потрібно використовувати одну й ту саму змінну для кількох операцій пошуку.
Компіляція Just-in-time
Ця опціональна можливість доступна у версії 8.20 і вище, якщо вона була дозволена при складанні бібліотеки PCRE. Найбільший приріст продуктивності можливий, наприклад, коли викликаюча програма повторно використовує раніше відтрансльовані регулярні вирази. Підтримка JIT була написана Золтаном Херцегом (Zoltan Herczeg) і не призначена для інтерфейсів POSIX та C++. Вбудований транслятор працює на таких архітектурах:
Приклад використання
Це приклад найпростішої програми на . Регулярний вираз і рядок задані у вихідному тексті (Компілювати з ключем -lpcre).
# include <iostream> # include <string.h> # include <pcre.h> using namespace std; int main() { char pattern[] = "[es]"; // шаблон (регулярний вираз) char str[] = "test"; // рядок, що розбирається // створення таблиці перекодування для локалі uk const unsigned char *tables = NULL; setlocale (LC_CTYPE, (const char *) "uk."); tables = pcre_maketables(); // компілювання регулярного виразу у внутрішнє представлення pcre *re; int options = 0; const char *error; int erroffset; re = pcre_compile ((char *) pattern, options, &error, &erroffset, tables); if (!re) { // у разі помилки компіляції cerr << "Failed at offset " << erroffset << ":" << error << "\n"; } else { int count = 0; int ovector[30]; count = pcre_exec (re, NULL, (char *) str, strlen(str), 0, 0, ovector, 30); // зіставляння із взірцем if (!count) { // якщо немає збігів cout << "No match\n"; } else { //виведення пар {початок, кінець} збігу for (int c = 0; c < 2 * count; c += 2) { if (ovector[c] < 0) { // або <unset> для підвиразів, що не збіглися cout << "<unset>\n"; } else{ cout << ovector[c] << ovector[c + 1] << "\n"; } } } } // звільняємо дані, під які виділялася пам'ять pcre_free((void *) re); pcre_free((void *) tables); return 0; }
Примітки
- (англ.). Архів оригіналу за 28 листопада 2017. Процитовано 3 грудня 2017.
- Jiong Wang (Tilera Corporation) (14 жовтня 2013). (англ.). Архів оригіналу за 29 жовтня 2013. Процитовано 3 грудня 2017. — Патч, що додає JIT транслятор для архітектури TileGX у бібліотеку PCRE (понад 12000 рядків)
Посилання
- pcre.org [ 16 липня 2018 у Wayback Machine.] — Домашня сторінка PCRE. (англ.)
- pcre.org/pcre.txt [ 28 листопада 2017 у Wayback Machine.] — Документація PCRE. (англ.)
- Вікі-документація з PCRE (деякі сторінки не перекладені) [ 4 грудня 2017 у Wayback Machine.] (рос.)
- Універсальна енциклопедія регулярних виразів стандарту PCRE [ 2 квітня 2022 у Wayback Machine.] (рос.)
- www.shtogrin.com/library/web/pcre [ 2 грудня 2017 у Wayback Machine.] — Perl-сумісні регулярні вирази (PCRE) (рос.)
- http://myregexp.com/applet.html [ 12 грудня 2017 у Wayback Machine.] — Online редактор регулярних виразів із повним підсвічуванням синтаксису (PCRE) (java-applet) (англ.)
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
PCRE Perl Compatible Regular Expressions biblioteka sho realizuye robotu regulyarnih viraziv u stili Perl z deyakimi vidminnostyami Sintaksis regulyarnih viraziv PCRE znachno potuzhnishij i gnuchkishij nizh standartnih regulyarnih viraziv POSIX PCRETipBiblioteka regulyarnih virazivRozrobnikdStabilnij vipusk8 41 2017 07 05 Operacijna sistemakrosplatformnaMova programuvannyaCLicenziyaBSDOnlajn dokumentaciyapcre2project github io pcre2 doc html index html angl pcre org current doc html index html angl Repozitorijgithub com PCRE2Project pcre2Vebsajtpcre org U tomu chi inshomu viglyadi dostupna dlya duzhe bagatoh mov programuvannya Zokrema v PHP modul PCRE vklyuchenij v yadro Avtor biblioteki Philip Hazel Biblioteka napisana na Si j rozpovsyudzhuyetsya pid vilnoyu licenziyeyu BSD Funkciyi bibliotekiBazovi funkciyi pcre pcre compile const char pattern int options const char errptr int erroffset const unsigned char tableptr Funkciya pcre compile kompilyuye regulyarnij viraz u vnutrishnye predstavlennya biblioteki Pershij argument posilannya na ryadok sho mistit regulyarnij viraz U drugomu mozhna vkazati rizni atributi yaki vidpovidayut opciyam igms v Perl Ostannij argument posilannya na tablicyu koduvannya stvorenu pcre maketables Yaksho pid chas kompilyaciyi shablonu stalasya pomilka povertaye NULL int pcre exec const pcre code const pcre extra extra const char subject int length int startoffset int options int ovector int ovecsize Funkciyu pcre exec vikoristovuyut dlya poshuku zbigiv U pershomu argumenti peredayut znachennya povernene pcre compile U drugomu dodatkovi vidomosti povernuti funkciyeyu pcre study Nastupni tri argumenti analizovanij ryadok jogo dovzhina ta zmishennya pochinayuchi z yakogo bude obroblyatisya ryadok Potim parametr yakij vkazuye opciyi yihnij dokladnij opis div u dokumentaciyi V ostannih dvoh argumentah potribno vkazati posilannya na zarezervovanij masiv cilih chisel i jogo dovzhinu U cej masiv zanosyatsya pari indeksiv sho vkazuyut na pochatok i kinec zbigiv Pershi dva elementi masivu opisuyut polozhennya vsogo virazu sho zbigsya Inshi pari polozhennya pidryadkiv yaki zbiglisya z virazami v kruglih duzhkah u shabloni analogi zminnih vidu 1 u Perl pcre extra pcre study const pcre code int options const char errptr Funkciya priskoryuye robotu programi sho vikonuye mnozhinu zistavlen z odnim i tim samim shablonom Stvoryuye zminnu yaka zberigaye dodatkovi vidomosti pro shablon yaki priskoryuyut jogo obrobku funkciyeyu pcre exec const unsigned char pcre maketables void Stvoryuye tablicyu simvoliv dlya vikoristannya yiyi funkciyeyu pcre compile Dobuvannya pidryadkiv int pcre copy substring const char subject int ovector int stringcount int stringnumber char buffer int buffersize int pcre get substring const char subject int ovector int stringcount int stringnumber const char stringptr Otrimuye z ryadka odin iz znajdenih pidryadkiv Dlya cogo vkazuyetsya nomer znajdenogo pidryadka Ci funkciyi vidriznyayutsya odna vid odnoyi tim sho pcre copy substring zapisuye rezultat u bufer yakomu vzhe vidilena pam yat a pcre get substring vidilyaye pam yat dlya bufera j zapisuye v nogo rezultat Pershi chotiri parametri v zaznachenih funkciyah odnakovi pershij ryadok v yakomu provodivsya poshuk drugij masiv stvorenij funkciyeyu pcre exec tretij znachennya povernute funkciyeyu pcre exec tobto kilkist znajdenih pidryadkiv chetvertij nomer potribnogo pidryadka Funkciyi povertayut dovzhinu pidryadka v razi uspihu v inshomu vipadku vid yemne znachennya kod pomilki int pcre get substring list const char subject int ovector int stringcount const char listptr Otrimuye z ryadka vsi znajdeni pidryadki void pcre free substring const char stringptr void pcre free substring list const char stringptr Zvilnyayut pam yat vidilenu vidpovidno pcre get substring i pcre get substring list POSIX sumisni U PCRE takozh realizovani funkciyi roboti z regulyarnimi virazami sumisni zi standartom POSIX Ci funkciyi mozhna vikoristovuvati dlya obrobki ryadkiv u koduvanni sho vidriznyayetsya vid bazovoyi ASCII int regcomp regex t preg const char pattern int cflags int regexec 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 Funkciya regerror peretvoryuye kod pomilki sho povertayetsya funkciyami regcomp i regexec u povidomlennya pro pomilku Pershij parametr kod pomilki Drugij skompilovanij shablon Tretij ryadok v yakij bude zapisano povidomlennya Chetvertij jogo dovzhina Funkciya regfree zvilnyaye zminnu sho zberigaye skompilovanij shablon yaka peredayetsya yak parametr Zastosovuyetsya koli potribno vikoristovuvati odnu j tu samu zminnu dlya kilkoh operacij poshuku Kompilyaciya Just in time Cya opcionalna mozhlivist dostupna u versiyi 8 20 i vishe yaksho vona bula dozvolena pri skladanni biblioteki PCRE Najbilshij pririst produktivnosti mozhlivij napriklad koli viklikayucha programa povtorno vikoristovuye ranishe vidtranslovani regulyarni virazi Pidtrimka JIT bula napisana Zoltanom Hercegom Zoltan Herczeg i ne priznachena dlya interfejsiv POSIX ta C Vbudovanij translyator pracyuye na takih arhitekturah ARM v5 v7 i Thumb2 Intel x86 32 biti j 64 biti MIPS 32 biti Power PC 32 biti j 64 biti SPARC 32 biti eksperimentalno eksperimentalno pochinayuchi z 8 34 Priklad vikoristannyaCe priklad najprostishoyi programi na S Regulyarnij viraz i ryadok zadani u vihidnomu teksti Kompilyuvati z klyuchem lpcre include lt iostream gt include lt string h gt include lt pcre h gt using namespace std int main char pattern es shablon regulyarnij viraz char str test ryadok sho rozbirayetsya stvorennya tablici perekoduvannya dlya lokali uk const unsigned char tables NULL setlocale LC CTYPE const char uk tables pcre maketables kompilyuvannya regulyarnogo virazu u vnutrishnye predstavlennya pcre re int options 0 const char error int erroffset re pcre compile char pattern options amp error amp erroffset tables if re u razi pomilki kompilyaciyi cerr lt lt Failed at offset lt lt erroffset lt lt lt lt error lt lt n else int count 0 int ovector 30 count pcre exec re NULL char str strlen str 0 0 ovector 30 zistavlyannya iz vzircem if count yaksho nemaye zbigiv cout lt lt No match n else vivedennya par pochatok kinec zbigu for int c 0 c lt 2 count c 2 if ovector c lt 0 abo lt unset gt dlya pidviraziv sho ne zbiglisya cout lt lt lt unset gt n else cout lt lt ovector c lt lt ovector c 1 lt lt n zvilnyayemo dani pid yaki vidilyalasya pam yat pcre free void re pcre free void tables return 0 Primitki angl Arhiv originalu za 28 listopada 2017 Procitovano 3 grudnya 2017 Jiong Wang Tilera Corporation 14 zhovtnya 2013 angl Arhiv originalu za 29 zhovtnya 2013 Procitovano 3 grudnya 2017 Patch sho dodaye JIT translyator dlya arhitekturi TileGX u biblioteku PCRE ponad 12000 ryadkiv Posilannyapcre org 16 lipnya 2018 u Wayback Machine Domashnya storinka PCRE angl pcre org pcre txt 28 listopada 2017 u Wayback Machine Dokumentaciya PCRE angl Viki dokumentaciya z PCRE deyaki storinki ne perekladeni 4 grudnya 2017 u Wayback Machine ros Universalna enciklopediya regulyarnih viraziv standartu PCRE 2 kvitnya 2022 u Wayback Machine ros www shtogrin com library web pcre 2 grudnya 2017 u Wayback Machine Perl sumisni regulyarni virazi PCRE ros http myregexp com applet html 12 grudnya 2017 u Wayback Machine Online redaktor regulyarnih viraziv iz povnim pidsvichuvannyam sintaksisu PCRE java applet angl