PCRE: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Метки: с мобильного устройства через мобильное приложение через приложение для Android
 
(не показано 30 промежуточных версий 26 участников)
Строка 1: Строка 1:
{{Карточка программы
{{Карточка программы
| name = PCRE
| name = PCRE
| logo =
| logo =
| screenshot =
| screenshot =
| caption =
| caption =
| genre = Библиотека [[Регулярные выражения|регулярных выражений]]
| genre = Библиотека [[Регулярные выражения|регулярных выражений]]
| developer =
| developer =
| programming_language = [[C (язык программирования)|C]]
| programming_language = [[C (язык программирования)|C]]
| operating_system = [[Кроссплатформенное программное обеспечение|кроссплатформенная]]
| operating_system = [[Кроссплатформенное программное обеспечение|кроссплатформенная]]
| license = [[Лицензия BSD|BSD]]
| latest_release_version = 8.12
| website = http://pcre.org
| latest_release_date = [[15 января]] [[2011]]
| license = [[Лицензия BSD|BSD]]
| website = [http://pcre.org pcre.org]
}}
}}
'''PCRE''' (''Perl Compatible Regular Expressions'') — библиотека, реализующая работу [[регулярные выражения|регулярных выражений]] в стиле [[Perl]] (с некоторыми отличиями). Синтаксис регулярных выражений PCRE значительно более мощный и гибкий, чем стандартных регулярных выражений [[POSIX]].
'''PCRE''' (''Perl Compatible Regular Expressions'') — библиотека, реализующая работу [[регулярные выражения|регулярных выражений]] в стиле [[Perl]] (с некоторыми отличиями). Синтаксис регулярных выражений PCRE значительно более мощный и гибкий, чем стандартных регулярных выражений [[POSIX]].


В том, или ином виде доступна для очень многих языков программирования. В частности, в [[PHP]], модуль PCRE включен в ядро.
В том или ином виде доступна для очень многих языков программирования. В частности, в [[PHP]] модуль PCRE включен в ядро.


Автор библиотеки — [[Филип Хейзел]] (Philip Hazel). Библиотека написана на [[Си (язык программирования)|Си]] и распространяется под [[свободный софт|свободной]] [[Лицензия BSD|лицензией BSD]].
Автор библиотеки — [[Филип Хейзел]] (Philip Hazel). Библиотека написана на [[Си (язык программирования)|Си]] и распространяется под [[свободный софт|свободной]] [[Лицензия BSD|лицензией BSD]].


== Функции библиотеки ==
== Функции библиотеки ==

=== Базовые функции ===
=== Базовые функции ===
<source lang=c>
<source lang=c>
Строка 26: Строка 23:
const char **errptr, int *erroffset,
const char **errptr, int *erroffset,
const unsigned char *tableptr);</source>
const unsigned char *tableptr);</source>
Функция ''pcre_compile'' компилирует регулярное выражение во внутреннее представление библиотеки. Первый аргумент&nbsp;— ссылка на содержащую регулярное выражение строку. Во втором можно указать различные атрибуты (соответствующие опциям /igms… в [[Perl]]). Последний аргумент&nbsp;— ссылка на таблицу кодировки, созданную ''pcre_maketables''.
Функция ''pcre_compile'' компилирует регулярное выражение во внутреннее представление библиотеки. Первый аргумент — ссылка на содержащую регулярное выражение строку. Во втором можно указать различные атрибуты (соответствующие опциям /igms… в [[Perl]]). Последний аргумент — ссылка на таблицу кодировки, созданную ''pcre_maketables''.
Если при компиляции шаблона произошла ошибка, возвращает NULL.
Если при компиляции шаблона произошла ошибка, возвращает NULL.
<source lang=c>int pcre_exec(const pcre *code, const pcre_extra *extra,
<source lang=c>int pcre_exec(const pcre *code, const pcre_extra *extra,
const char *subject, int length, int startoffset, int options,
const char *subject, int length, int startoffset, int options,
int *ovector, int ovecsize);</source>
int *ovector, int ovecsize);</source>
Функцию ''pcre_exec'' используют для поиска совпадений. В первом аргументе передают значение, возвращённое ''pcre_compile''. Следующие три аргумента&nbsp;— анализируемая строка, её длина и смещение, начиная с которого будет обрабатываться строка. Затем&nbsp;— параметр, указывающий опции (их подробное описание см. в документации).
Функцию ''pcre_exec'' используют для поиска совпадений. В первом аргументе передают значение, возвращённое ''pcre_compile''. Во втором — дополнительные сведения, возвращённые функцией ''pcre_study''. Следующие три аргумента — анализируемая строка, её длина и смещение, начиная с которого будет обрабатываться строка. Затем — параметр, указывающий опции (их подробное описание см. в документации).


В последних двух аргументах нужно указать ссылку на зарезервированный массив целых чисел и его длину. В этот массив заносятся пары индексов, указывающих на начало и конец совпадений. Первые два элемента массива описывают положение всего совпавшего выражения. Остальные пары&nbsp;— положение подстрок, которые совпали с выражениями в круглых скобках в шаблоне (аналоги переменных вида $1 в [[Perl]]).
В последних двух аргументах нужно указать ссылку на зарезервированный массив целых чисел и его длину. В этот массив заносятся пары индексов, указывающих на начало и конец совпадений. Первые два элемента массива описывают положение всего совпавшего выражения. Остальные пары — положение подстрок, которые совпали с выражениями в круглых скобках в шаблоне (аналоги переменных вида $1 в [[Perl]]).


<source lang=c>
<source lang=c>
Строка 42: Строка 39:
const unsigned char *pcre_maketables(void);
const unsigned char *pcre_maketables(void);
</source>
</source>
Cоздает таблицу символов для использования её функцией ''pcre_compile''
Создает таблицу символов для использования её функцией ''pcre_compile''


=== Извлечение подстрок ===
=== Извлечение подстрок ===

<source lang=c>
<source lang=c>
int pcre_copy_substring(const char *subject, int *ovector, int stringcount,
int pcre_copy_substring(const char *subject, int *ovector, int stringcount,
Строка 56: Строка 52:
Получает из строки одну из найденных подстрок. Для этого указывается номер найденной подстроки. Эти функции отличаются друг от друга тем, что ''pcre_copy_substring'' записывает результат в буфер, которому уже выделена память, а ''pcre_get_substring'' выделяет память для буфера и записывает в него результат.
Получает из строки одну из найденных подстрок. Для этого указывается номер найденной подстроки. Эти функции отличаются друг от друга тем, что ''pcre_copy_substring'' записывает результат в буфер, которому уже выделена память, а ''pcre_get_substring'' выделяет память для буфера и записывает в него результат.


Первые четыре параметра у указанных функций одинаковые: первый&nbsp;— строка, в которой производился поиск, второй&nbsp;— массив, созданный функцией ''pcre_exec'', третий&nbsp;— значение, возвращённое функцией pcre_exec, то есть количество найденных подстрок, четвёртый&nbsp;— номер нужной подстроки.
Первые четыре параметра у указанных функций одинаковые: первый — строка, в которой производился поиск, второй — массив, созданный функцией ''pcre_exec'', третий — значение, возвращённое функцией pcre_exec, то есть количество найденных подстрок, четвёртый — номер нужной подстроки.


Функции возвращают длину подстроки в случае успеха, в противном случае&nbsp;— отрицательное значение&nbsp;— код ошибки
Функции возвращают длину подстроки в случае успеха, в противном случае — отрицательное значение — код ошибки
<source lang=c>
<source lang=c>
int pcre_get_substring_list(const char *subject, int *ovector,
int pcre_get_substring_list(const char *subject, int *ovector,
Строка 66: Строка 62:
<source lang=c>void pcre_free_substring(const char *stringptr);</source>
<source lang=c>void pcre_free_substring(const char *stringptr);</source>
<source lang=c>void pcre_free_substring_list(const char **stringptr);</source>
<source lang=c>void pcre_free_substring_list(const char **stringptr);</source>
Освобождают память выделенную, соответственно, ''pcre_get_substring'' и ''pcre_get_substring_list''.
Освобождают память, выделенную, соответственно, ''pcre_get_substring'' и ''pcre_get_substring_list''.


=== POSIX-совместимые ===
=== POSIX-совместимые ===

В PCRE также реализованы функции работы с регулярными выражениями, совместимые со стандартом [[POSIX]]. Эти функции нельзя использовать для обработки строк в кодировке, отличающейся от базовой [[ASCII]]:
В PCRE также реализованы функции работы с регулярными выражениями, совместимые со стандартом [[POSIX]]. Эти функции нельзя использовать для обработки строк в кодировке, отличающейся от базовой [[ASCII]]:
<source lang=c>int regcomp(regex_t *preg, const char *pattern, int cflags);
<source lang=c>int regcomp(regex_t *preg, const char *pattern, int cflags);
Строка 75: Строка 70:
size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size);
size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size);
void regfree(regex_t *preg);</source>
void regfree(regex_t *preg);</source>
Функция ''regerror'' преобразует код ошибки, возвращаемый функциями regcomp и regexec, в сообщение об ошибке. Первый параметр&nbsp;— код ошибки. Второй&nbsp;— скомпилированный шаблон. Третий&nbsp;— строка, в которую будет записано сообщение. Четвёртый&nbsp;— её максимальная длина.
Функция ''regerror'' преобразует код ошибки, возвращаемый функциями regcomp и regexec, в сообщение об ошибке. Первый параметр — код ошибки. Второй — скомпилированный шаблон. Третий — строка, в которую будет записано сообщение. Четвёртый — её максимальная длина.

Функция ''regfree'' освобождает переменную, хранящую скомпилированный шаблон, которая передаётся как параметр. Применяется, когда нужно использовать одну и ту же переменную для нескольких операций поиска.


=== Компиляция Just-in-time ===
Функция ''regfree'' освобождает переменную, хранящую cкомпилированный шаблон, которая передаётся как параметр. Применяется, когда нужно использовать одну и ту же переменную для нескольких операциях поиска.
Эта опциональная возможность доступна в версии 8.20 и выше, если она была разрешена при сборке библиотеки PCRE. Наибольший прирост производительности возможен, например, когда вызывающая программа повторно использует ранее оттранслированные регулярные выражения. Поддержка [[JIT]] была написана Золтаном Херцегом (Zoltan Herczeg)<ref name="pcreman" /> и не предназначена для интерфейсов POSIX и C++. Встроенный транслятор работает на следующих архитектурах:<ref name="pcreman" />
* [[ARM (архитектура)|ARM]] v5, v7 и Thumb2
* Intel [[x86]] 32-бита и 64-бита
* [[MIPS (архитектура)|MIPS]] 32-бита
* [[PowerPC|Power PC]] 32-бита и 64-бита
* [[SPARC]] 32-бит (экспериментально)
* [[Tilera|TileGX]] (экспериментально, начиная с 8.34)<ref name="tilegxjit" />


== Пример использования ==
== Пример использования ==
Это пример простейшей программы на [[С++]]. Регулярное выражение и строка заданы в исходном тексте.
Это пример простейшей программы на [[C++]]. Регулярное выражение и строка заданы в исходном тексте (компилировать с ключом -lpcre).
<source lang=cpp>
<source lang="cpp">
# include <iostream>
# include <iostream>
# include <string.h>
# include <pcre.h>
# include <pcre.h>

using namespace std;
using namespace std;

int main(){
int main() {


char pattern[] = "[es]"; // шаблон (регулярное выражение)
char pattern[] = "[es]"; // шаблон (регулярное выражение)
Строка 102: Строка 109:
re = pcre_compile ((char *) pattern, options, &error, &erroffset, NULL);
re = pcre_compile ((char *) pattern, options, &error, &erroffset, NULL);


if (!re){ // в случае ошибки компиляции
if (!re) { // в случае ошибки компиляции
cout << "Failed\n";
cerr << "Failed at offset " << erroffset << ":" << error << "\n";
}
} else {
else{
int count = 0;
int count = 0;
int ovector[30];
int ovector[30];


count = pcre_exec (re, NULL, (char *) str, strlen(str), 0, NULL, ovector, 30);
count = pcre_exec (re, NULL, (char *) str, strlen(str), 0, 0, ovector, 30);
// выполнение сопоставления с образцом
// выполнение сопоставления с образцом
if (!count){ // если нет совпадений
if (!count) { // если нет совпадений
cout << "No match\n";
cout << "No match\n";
}
} else {
else{
//вывод пар {начало, конец} совпадения
//вывод пар {начало, конец} совпадения
for (int c = 0; c < 2 * count; c += 2){
for (int c = 0; c < 2 * count; c += 2) {
if (ovector[c] < 0){ // или <unset> для несопоставившихся подвыражений
if (ovector[c] < 0) { // или <unset> для несопоставившихся подвыражений
cout << "<unset>\n";
cout << "<unset>\n";
}
} else{
else{
cout << ovector[c] << ovector[c + 1] << "\n";
cout << ovector[c] << ovector[c + 1] << "\n";
}
}
Строка 126: Строка 130:
}
}
}
}

// освобождаем данные, под которые выделялась память
pcre_free((void *) re);
pcre_free((void *) tables);
return 0;
return 0;
}
}
</source>
</source>

== Примечания ==
{{примечания|2|refs=

<ref name="pcreman">{{cite web | url=http://www.pcre.org/pcre.txt | lang=en | title=PCRE(3) Library Functions Manual | access-date=2013-10-29 | archive-date=2017-11-28 | archive-url=https://web.archive.org/web/20171128052523/http://www.pcre.org/pcre.txt | deadlink=no }}</ref>

<ref name="tilegxjit">{{cite web | url=https://gitorious.org/pcre/pcre/commit/e1603e6c9a8425a4c3e7e7aab2f4255d76e756c3 | lang=en | title=Add JIT support for the 64 bit TileGX architecture. | author=Jiong Wang (Tilera Corporation) | date=2013-10-14 | description=Патч добавляющий [[JIT]] транслятор для архитектуры TileGX в библиотеку PCRE (более 12000 строк) | deadlink=yes | archiveurl=https://web.archive.org/web/20131029204637/https://gitorious.org/pcre/pcre/commit/e1603e6c9a8425a4c3e7e7aab2f4255d76e756c3 | archivedate=2013-10-29 }}</ref>

}}


== Ссылки ==
== Ссылки ==
* [http://pcre.org/ pcre.org]{{ref-en}}&nbsp;— Домашняя страница PCRE.
* [http://pcre.org/ pcre.org]{{ref-en}} — Домашняя страница PCRE.
* [http://pcre.org/pcre.txt pcre.org/pcre.txt]{{ref-en}} — Документация PCRE.
* [http://pcre.org/pcre.txt pcre.org/pcre.txt]{{ref-en}} — Документация PCRE.
* [http://libs.wikia.com/wiki/PCRE Русская вики-документация по PCRE (некоторые страницы не переведены)]
* [http://libs.wikia.com/wiki/PCRE Русская вики-документация по PCRE (некоторые страницы не переведены)]
* [http://www.pcre.ru Универсальная энциклопедия регулярных выражений стандарта PCRE]
* [http://dh.opennet.ru/pcre.html dh.opennet.ru/pcre.html]&nbsp;— Адлан Ерижоков «PCRE»
* [http://www.shtogrin.com/library/web/pcre/ www.shtogrin.com/library/web/pcre] — Perl-совместимые регулярные выражения (PCRE)
* [http://www.pcre.ru/ www.pcre.ru]&nbsp;— Универсальная энциклопедия регулярных выражений стандарта PCRE
* [http://regexp.ru/ regexp.ru]&nbsp;— /Регулярные выражения/ (проект Андрея Шитова)
* [http://www.shtogrin.com/library/web/pcre/ www.shtogrin.com/library/web/pcre]&nbsp;— Perl-совместимые регулярные выражения (PCRE)
* [http://myregexp.com/applet.html http://myregexp.com/applet.html]{{ref-en}} — Online редактор регулярных выражений с полной подсветкой синтаксиса (PCRE) (java-applet)
* [http://myregexp.com/applet.html http://myregexp.com/applet.html]{{ref-en}} — Online редактор регулярных выражений с полной подсветкой синтаксиса (PCRE) (java-applet)


{{compu-prog-stub}}
{{freesoftware-stub}}


[[Категория:Свободные библиотеки программ]]
[[Категория:Свободные библиотеки программ]]
[[Категория:Perl]]
[[Категория:Perl]]
[[Категория:PHP]]
[[Категория:PHP]]
[[Категория:Библиотеки C]]
[[Категория:Библиотеки Си]]
[[Категория:Статьи с примерами кода C++]]
[[Категория:Статьи с примерами кода C++]]

[[de:Perl Compatible Regular Expressions]]
[[en:Perl Compatible Regular Expressions]]
[[fr:PCRE]]
[[ja:Perl Compatible Regular Expressions]]
[[pl:PCRE]]
[[pt:Perl Compatible Regular Expressions]]

Текущая версия от 07:51, 13 мая 2024

PCRE
Тип Библиотека регулярных выражений
Разработчик Philip Hazel[вд]
Написана на C
Операционная система кроссплатформенная
Последняя версия
Репозиторий github.com/PCRE2Project/…
Лицензия BSD
Сайт pcre.org

PCRE (Perl Compatible Regular Expressions) — библиотека, реализующая работу регулярных выражений в стиле Perl (с некоторыми отличиями). Синтаксис регулярных выражений PCRE значительно более мощный и гибкий, чем стандартных регулярных выражений POSIX.

В том или ином виде доступна для очень многих языков программирования. В частности, в 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)[2] и не предназначена для интерфейсов POSIX и C++. Встроенный транслятор работает на следующих архитектурах:[2]

  • ARM v5, v7 и Thumb2
  • Intel x86 32-бита и 64-бита
  • MIPS 32-бита
  • Power PC 32-бита и 64-бита
  • SPARC 32-бит (экспериментально)
  • TileGX (экспериментально, начиная с 8.34)[3]

Пример использования

[править | править код]

Это пример простейшей программы на C++. Регулярное выражение и строка заданы в исходном тексте (компилировать с ключом -lpcre).

# include <iostream>
# include <string.h>
# include <pcre.h>

using namespace std;

int main() {

   char pattern[] = "[es]"; // шаблон (регулярное выражение)
   char str[] = "test";  // разбираемая строка

   // создание таблицы перекодировки для локали ru
   const unsigned char *tables = NULL;         
   setlocale (LC_CTYPE, (const char *) "ru.");
   tables = pcre_maketables();

   // компилирование регулярного выражения во внутреннее представление
   pcre *re;
   int options = 0;
   const char *error;
   int erroffset;
   re = pcre_compile ((char *) pattern, options, &error, &erroffset, NULL);

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

Примечания

[править | править код]
  1. Release 10.44 — 2024.
  2. 1 2 PCRE(3) Library Functions Manual (англ.). Дата обращения: 29 октября 2013. Архивировано 28 ноября 2017 года.
  3. Jiong Wang (Tilera Corporation). Add JIT support for the 64 bit TileGX architecture. (англ.) (14 октября 2013). — Патч добавляющий JIT транслятор для архитектуры TileGX в библиотеку PCRE (более 12000 строк). Архивировано из оригинала 29 октября 2013 года.