После более полугода разработки, состоялся выпуск 10.45 библиотеки PERL-совместимых регулярных выражений PCRE2, написанной на языке C и распространяемой по лицензии BSD. Это сравнительно большой выпуск, включающий в себя новые функции, некоторые исправления ошибок и несколько изменений, имеющих небольшое влияние на обратную совместимость.
Версия 10.45 – это первый выпуск, подготовленный новыми сопровождающими проекта, которые благодарят Филипа Хейзела, создателя и сопровождающего проектов PCRE и PCRE2.
Список изменений:
- Проект JIT-компиляции sljit теперь используется как субмодуль Git.
- Обновлены данные Юникода до версии 16.
- Нечувствительное к регистру сопоставление свойств Unicode
Ll
,Lt
иLu
было изменено для соответствия Perl. Ранее шаблон/\p{Ll}/i
учитывал только символы нижнего регистра (даже если было указано сопоставление без учета регистра). Это изменение также влияет на нечувствительное к регистру сопоставление классов POSIX, таких, как, например[:lower:]
. - Добавлена новая функция
scan_substring
. Это новый тип утверждения, которое сопоставляет содержимое захватываемого блока с подшаблоном.
Например, выражение\b(\w++)(*scan_substring:(1).+rh)
находит слово, содержащее редкую в английском языке последовательность букв «rh», находящуюся не в самом начале. - Добавлена поддержка классов символов, совместимых с UTS#18 (Unicode Regular Expressions), с помощью новой опции
PCRE2_ALT_EXTENDED_CLASS
. Для этого нужно использовать[
в качестве метасимвола в символьных классах и операторы&&
,--
и~~
, что позволяет легко производить вычитания и пересечения классов символов.
Например, для соответствия тайским или греческим буквам (но не буквам или другим символам в этих письменностях) можно использовать выражение[\p{L}&&[\p{Thai}||\p{Greek}]]
. - Добавлена поддержка расширенных классов символов в стиле Perl, используя синтаксис
(?[...])
. Это также позволяет выражать вычитания и пересечения классов символов, но с использованием синтаксиса, отличного от UTS#18 (Unicode Regular Expressions).
Например, для соответствия тайским или греческим буквам (но не буквам или другим символам в этих письменностях) можно использовать выражение(?[\p{L} & (\p{Thai} + \p{Greek})])
. - Значительные улучшения в механизме сопоставления классов символов. Скомпилированные символьные классы теперь более компактны и обеспечивают более быстрое сопоставление для больших или сложных наборов символов, используя двоичный поиск по набору.
- В API добавлена новая функция
pcre2_set_optimize()
для управления оптимизациями. - Множество улучшений функции
pcre2_substitute()
. - Другие улучшения и исправления ошибок.