Сравнение движков регулярных выражений
Это сравнение регулярных выражений движков .
Библиотеки [ править ]
Имя | Официальный сайт | Язык программирования | Лицензия на программное обеспечение | Используется |
---|---|---|---|---|
Повышение .Регулярного выражения [Примечание 1] | Повышение библиотеки C++ | С++ | Способствовать росту | Блокнот++ >= 6.0.0, EmEditor |
Boost.Xpressive | Повышение библиотеки C++ | С++ | Способствовать росту | |
ДЕЛКС | РегЭксЛаб | С++ | Собственный | |
FREJ [Примечание 2] | Нечеткие регулярные выражения для Java | Ява | LGPL | |
GLib /GRegex [Примечание 3] | Справочное руководство по GLib | С | LGPL | |
GNU регулярное выражение | Справочное руководство по Gnulib | С | LGPL | GNU libc , программы GNU |
ГРЕТА | Microsoft Исследования | С++ | Собственный | |
Грегекс | Компания "Гровф" | РТЛ, ЗОЖ | Собственный | FPGA ускорил механизм регулярных выражений >100 Гбит/с для отраслей кибербезопасности, финансов и электронной коммерции. |
Гиперскан | Интел | C, x86 -специфичная сборка ( SSSE3 + [1] ) | 3-пунктовый BSD | Расспамд |
отделение интенсивной терапии | Международные компоненты для Unicode | С, С++ [Примечание 4] | отделение интенсивной терапии | Foundation (версии с открытым исходным кодом для Apple и Swift) |
Джакарта Регулярное выражение | Проект Апач Джакарта | Ява | Апач | |
java.util.regex | Руководство пользователя Java | Ява | GNU GPLv2 с исключением Classpath | jПравить |
JRegex | JRegex | Ява | БСД | |
МАТЛАБ | Регулярные выражения | Язык MATLAB | Собственный | |
Онигурума | Коса | С | БСД | Atom , Take Command Console , Tera Term , TextMate , Sublime Text , SubEthaEdit , EmEditor и jq |
Паттво | Стивсофт | Java (совместим с Java 1.0) | LGPL | |
ПКРЕ | pcre.org | С, С++ [Примечание 5] | БСД | HTTP-сервер Apache , Nginx , BBEdit , Edbrowse , Julia , HHVM , Notepad++ <6.0.0, PHP , Delphi , R , Exim SWI-Prolog |
Qt /QRegExp | Digia. Архивировано 12 декабря 2013 г. в Wayback Machine. | С++ | Qt GNU GPL v. 3.0 , | Кейт , Кайл |
regex — Генри Спенсера библиотеки регулярных выражений . | список аргументов | С | БСД | |
РЕ2 | РЕ2 | С++ | БСД | Go , Google Таблицы, Gmail, G Suite |
Генри Спенсера Расширенные регулярные выражения | Ткл | С | БСД | |
РГКС | РГКС | Библиотека компонентов на основе C++ | P6R | |
РХП | Титан ИК | РТЛ | Собственный | аппаратное ускорение поиска с использованием RegEx, доступное для ASIC, FPGA и облака. Обеспечивает массовую параллельную обработку контента на сверхвысоких скоростях. |
субрег. | Мэтт Бакнелл | С | С | |
ТПерлрегекс | Компонент VCL TPerlRegEx | Объектный Паскаль | MPLv1.1 | |
ТРИ [Примечание 2] | Вилле Лаурикари | С | БСД | мышца |
TRegExpr | TRegExpr , документация , ( Студия RegExp ) | Объектный Паскаль | Двойная лицензия: бесплатное ПО или LGPL с исключением статической привязки. | Тотал Коммандер |
Язык Wolfram ( Математика ) | Центр языковой документации Wolfram | Вольфрам Язык | Собственный | Mathematica , платформа разработки Wolfram |
XRegExp | XRegExp | JavaScript | С |
- ^ Ранее назывался Regex++.
- ^ Jump up to: Перейти обратно: а б Один из нечетких движков регулярных выражений .
- ^ Включено с версии 2.13.0.
- ^ ICU4J, версия Java, не поддерживает регулярные выражения.
- ^ Привязки C++ были разработаны Google и официально стали частью PCRE в 2006 году.
Языки [ править ]
Язык | Официальный сайт | Лицензия на программное обеспечение | Примечания |
---|---|---|---|
Экшнскрипт 3 | Технологический центр ActionScript | Бесплатно | |
APL ( APLX , Диалог, GNU) | АПЛ вики | Лицензировано соответствующей реализацией | ⎕SS (ПКРЕ), ⎕R / ⎕S (ПКРЕ), ⎕SS (PCRE2) соответственно |
С++11 ( С++ ) | Веб-сайт стандартов C++ | Лицензировано соответствующей реализацией | Начиная с ISO14822:2011(e), по умолчанию аналогично ECMAScript (описание грамматики). |
Д | Д | Лицензия на программное обеспечение Boost [Примечание 1] | |
Бесплатный Паскаль ( Объектный Паскаль ) | freepascal.org | LGPL с исключением статической привязки | Free Pascal 2.6+ поставляется с TRegExpr от Сорокина и двумя другими библиотеками регулярных выражений; См. wiki.lazarus.freepascal.org/Regexpr . |
Идти | Golang.org | BSD-стиль | |
Хаскелл | Haskell.org | БСД3 | Опущено в языковом отчете и в иерархических библиотеках GHC. |
Ява | Ява | Стандартная общественная лицензия GNU | RE записываются в исходном коде как строки: все обратные косые черты необходимо удваивать, что ухудшает читаемость. |
JavaScript ( ECMAScript ) | ЭКМА-262 | БСД3 | Ограничено, но RE являются первоклассными гражданами языка с особыми /.../mod синтаксис. |
Юлия | JuliaLang.org | МОЯ лицензия | RE являются частью базовой библиотеки языка, использующей встроенный PCRE, и доступна дополнительная оболочка для (код C) ICU. |
Два | Lua.org | МОЯ лицензия | Использует упрощенный ограниченный диалект; может быть привязан к более мощной библиотеке, например PCRE, или альтернативному парсеру, например LPeg. |
Математика | Вольфрам | Собственный | |
.СЕТЬ | MSDN | МОЯ лицензия [Примечание 2] [Примечание 3] | |
Nim | nim-lang.org | МОЯ лицензия | на основе PCRE Стандартная библиотека включает модули re и nre , а также различные альтернативы (например, strutils , pegs ( сопоставление грамматики выражений ), strscans , parseutils и т. д.). |
OCaml | Камл | LGPL | По состоянию на 2010 год [update], стандартный модуль обычно считается устаревшим; [2] часто рекомендуемыми библиотеками являются pcre (с полной поддержкой PCRE) и re (которые не столь полны, но требуют более высокой производительности и предоставляют интерфейсы для популярных синтаксисов: PCRE, Perl, Posix, Emacs, подстановку оболочки). |
Перл | Perl.com | Художественная лицензия или Генеральная общественная лицензия GNU. | Полная, центральная часть языка |
PHP | PHP.net | PHP-лицензия | Имеет две реализации, причем PCRE более эффективен по скорости. |
POSIX С ( С ) | Веб-публикация POSIX.1 | Лицензировано соответствующей реализацией | Поддерживает POSIX BRE и ERE. синтаксис |
Питон | python.org | Лицензия Фонда программного обеспечения Python | Python имеет две основные реализации: встроенную re и библиотеку регулярных выражений . |
Руби | ruby-doc.org | Стандартная общественная лицензия библиотеки GNU | Ruby 1.8, Ruby 1.9 и Ruby 2.0 и более поздние версии используют разные движки; Ruby 1.9 интегрирует Oniguruma, Ruby 2.0 и более поздние версии интегрируют Onigmo, ответвление Oniguruma. |
Ржавчина | docs.rs | МОЯ лицензия | Основной контейнер регулярных выражений не допускает обходных выражений. Есть привязка Онигурума, называемая ониг , которая делает это. |
SAP ABAP | SAP.com | Собственный | |
Ткл | tcl.tk | Лицензия Tcl/Tk (в стиле BSD) | Библиотека Tcl выполняет функцию библиотеки регулярных выражений. |
Вольфрам Язык | Вольфрам Исследования | Собственный : можно бесплатно использовать в ограниченном масштабе на платформе разработки Wolfram. | |
XML-схема | W3C | Лицензировано соответствующей реализацией | |
XPath 3 / XQuery | W3C | Лицензировано соответствующей реализацией |
- ^ «STD.regex — Язык программирования D — Digital Mars» .
- ^ «Дотнет/Корефкс» . Гитхаб . 16 февраля 2022 г.
- ^ «Дотнет/Корефкс» . Гитхаб . 16 февраля 2022 г.
Языковые особенности [ править ]
ПРИМЕЧАНИЕ. Приложение, использующее библиотеку для поддержки регулярных выражений, не обязательно поддерживает полный набор функций библиотеки, например, GNU grep использует PCRE, но не поддерживает просмотр вперед, хотя PCRE поддерживает.
Часть 1 [ править ]
Квантор «+» | Отрицательные классы символов | Нежадные квантификаторы [Примечание 1] | Застенчивые группы [Примечание 2] | Рекурсия | смотреть вперед | Посмотреть назад | Обратные ссылки [Примечание 3] | >9 индексируемых снимков | |
---|---|---|---|---|---|---|---|---|---|
Boost.Регулярное выражение | Да | Да | Да | Да | Да [Примечание 4] | Да | Да | Да | Да |
Boost.Xpressive | Да | Да | Да | Да | Да [Примечание 5] | Да | Да | Да | Да |
CL-PPCRE | Да | Да | Да | Да | Нет | Да | Да | Да | Да |
Эмредактор | Да | Да | Да | Да | Нет | Да | Да | Да | Нет |
FREJ | Нет [Примечание 6] | Нет | Некоторый [Примечание 6] | Да | Нет | Нет | Нет | Да | Да |
GLib /GRegex | Да | Да | Да | Да | Да | Да | Да | Да | Да |
GNU команда | Да | Да | Да | Да | Нет | Да | Да | Да | — |
Хаскелл | Да | Да | Да | Да | Нет | Да | Да | Да | Да |
РХП | Да | Да | Да | Да | Нет | Нет | Нет | Да | Да |
в отделении интенсивной терапии регулярное выражение | Да | Да | Да | Да | Нет | Да | Да | Да | Да |
Ява | Да | Да | Да | Да | Нет | Да | Да | Да | Да |
JavaScript ( ECMAScript ) | Да | Да | Да | Да | Нет | Да | Да [Примечание 7] | Да | Да |
JGsoft | Да | Да | Да | Да | Нет | Да | Да | Да | Да |
Два | Да | Да | Некоторый [Примечание 8] | Нет | Нет | Нет | Нет | Да | Нет |
.СЕТЬ | Да | Да | Да | Да | Нет | Да | Да | Да | Да |
OCaml | Да | Да | Нет | Нет | Нет | Нет | Нет | Да | Нет |
ПКРЕ | Да | Да | Да | Да | Да | Да | Да | Да | Да |
Перл | Да | Да | Да | Да | Да | Да | Да | Да | Да |
PHP | Да | Да | Да | Да | Да | Да | Да | Да | Да |
Питон | Да | Да | Да | Да | Да [Примечание 9] | Да | Да | Да | Да |
Qt /QRegExp | Да | Да | Да | Да | Нет | Да | Нет | Да | Да |
РЕ2 | Да | Да | Да | Да | Нет | Нет | Нет | Нет | Да |
Руби, Онигмо | Да | Да | Да | Да | Да | Да | Да | Да | Да |
ТРИ | Да | Да | Да | Да | Нет | Нет | Нет | Да | Нет |
Почему | Да | Да | Да | Да | Нет | Да | Да | Да | Нет |
РГКС | Да | Да | Да | Да | Нет | Да | Да | Да | Да |
Ткл | Да | Да | Да | Да | Нет | Да | Да | Да | Да |
TRegExpr | Да | ? | Да | ? | ? | ? | ? | ? | ? |
XML-схема | Да | Да | Нет | — | Нет | Нет | Нет | Нет | — |
XPath 3 / XQuery | Да | Да | Да | Да | Нет | Нет | Нет | Да | Да |
XRegExp | Да | Да | Да | Да | Нет | Да | Да [Примечание 7] | Да | Да |
- ^ Нежадные квантификаторы соответствуют как можно меньшему количеству символов вместо заданного по умолчанию. Обратите внимание, что многие старые механизмы, существовавшие до POSIX, были нежадными и вообще не имели жадных кванторов.
- ^ Застенчивые группы , также называемые группами без захвата, на которые нельзя ссылаться с помощью обратных ссылок; группы без захвата используются для ускорения сопоставления, когда к содержимому группы не требуется доступ в дальнейшем.
- ^ Обратные ссылки позволяют ссылаться на ранее сопоставленные группы в более поздних частях регулярного выражения и/или строки замены (где применимо). Например, ([ab]+)\1 соответствует «abab», но не соответствует «abaab».
- ^ «Синтаксис регулярных выражений Perl — 1.47.0» .
- ^ «Руководство пользователя – 1.47.0» .
- ^ Jump up to: Перейти обратно: а б В FREJ нет повторяющихся квантификаторов, но есть «необязательный» элемент, который ведет себя аналогично простому «?» квантификатор.
- ^ Jump up to: Перейти обратно: а б По состоянию на ES2018
- ^ Единственный нежадный квантификатор Lua - это
-
, который является нежадной версией*
. У него нет нежадных версий+
или?
; в первом случае нежадного эффекта можно добиться, повторяя токен, за которым следует-
, но в последнем случае эквивалента нет. - ^ Поддерживается только дополнительной библиотекой регулярных выражений .
Часть 2 [ править ]
Директивы [Примечание 1] | Условные предложения | Атомные группы [Примечание 2] | Именованный захват [Примечание 3] | Комментарии | Встроенный код | Юникода Поддержка свойств [3] | Балансирующие группы [Примечание 4] | Просмотры переменной длины [Примечание 5] | |
---|---|---|---|---|---|---|---|---|---|
Boost.Регулярное выражение | Да | Да | Да | Да | Да | Нет | Некоторый [Примечание 6] | Нет | Нет |
Boost.Xpressive | Да | Нет | Да | Да | Да | Нет | Нет | Нет | Нет |
CL-PPCRE | Да | Да | Да | Да | Да | Да | Некоторый [Примечание 6] | Нет | Нет |
Эмредактор | Да | Да | ? | ? | Да | Нет | ? | Нет | Нет |
FREJ | Нет | Нет | Да | Да | Да | Нет | ? | Нет | Нет |
GLib /GRegex | Да | Да | Да | Да | Да | Нет | Некоторый [Примечание 6] | Нет | Нет |
GNU команда | Да | Да | ? | Да | Да | Нет | Нет | Нет | Нет |
Хаскелл | ? | ? | ? | ? | ? | Нет | Нет | Нет | Нет |
РХП | Да | Да | Нет | Да | Да | Нет | Нет | Нет | Нет |
в отделении интенсивной терапии регулярное выражение | Да | Нет | Да | Да [Примечание 7] | Да | Нет | Да | Нет | Нет |
Ява | Да | Нет | Да | Да [Примечание 8] | Да | Нет | Некоторый [Примечание 6] | Нет | Нет |
JavaScript ( ECMAScript ) | Нет | Нет | Нет | Да | Нет | Нет | Некоторый [Примечание 6] [Примечание 9] [4] | Нет | Да |
JGsoft | Да | Да | Да | Да | Да | Нет | Некоторый [Примечание 6] | Нет | Да |
Два | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
.СЕТЬ | Да | Да | Да | Да | Да | Нет | Некоторый [Примечание 6] | Да | Да |
OCaml | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
ПКРЕ | Да | Да | Да | Да | Да | Да | Да | Нет | Нет |
Перл | Да | Да | Да | Да | Да | Да | Да | Нет | Нет [Примечание 10] |
PHP | Да | Да | Да | Да | Да | Нет | Нет | Нет | Нет |
Питон | Да | Да | Да [Примечание 11] | Да | Да | Нет | Да [Примечание 12] | Нет | Да [Примечание 13] |
Qt /QRegExp | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
РЕ2 | Да | Нет | ? | Да | Нет | Нет | Некоторый [Примечание 6] | Нет | Нет |
Руби, Онигмо | Да | Да | Да | Да | Да | Нет | Некоторый [Примечание 6] | Нет | Нет |
Ткл | Да | Нет | Да | Нет | Да | Нет | Да | Нет | Нет |
ТРИ | Да | Нет | Нет | Нет | Да | Нет | ? | Нет | Нет |
Почему | Да | Нет | Да | Нет | Нет | Нет | Нет | Нет | Да |
РГКС | Да | Да | Да | Да | Да | Нет | Да | Нет | Нет |
XML-схема | Нет | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет |
XPath 3 / XQuery | Нет | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет |
XRegExp | Только ведущий | Нет | Нет | Да | Да | Нет | Да | Нет | Да |
- ^ Также известны как модификаторы флагов , модификаторы режимов или буквы опций . Пример шаблона: «(?i:test)».
- ^ Также называются независимыми подвыражениями .
- ^ Аналогично обратным ссылкам, но с именами вместо индексов.
- ^ Специальная функция, позволяющая сопоставлять сбалансированные конструкции без рекурсии.
- ^ Относится к возможности включения кванторов в просмотр назад, что делает их длину непредсказуемой.
- ^ Jump up to: Перейти обратно: а б с д и ж г час я Поддержка свойств Unicode может быть неполной (продукты постоянно обновляются!). Все будет неполным , когда будет выпущена новая версия Unicode, пока они не будут обновлены для соответствия.
- ^ Доступно с ICU55.
- ^ Доступно начиная с JDK7.
- ^ Поддержка и диапазон свойств зависят от реализации.
- ^ Экспериментальная поддержка добавлена в версии 5.29.9.
- ^ Поддерживается только Python v3.11 и более поздних версий, а также дополнительной библиотекой регулярных выражений .
- ^ Может быть доступно только в библиотеке регулярных выражений при использовании с версиями Python после 3.3.
- ^ Поддерживается только дополнительной библиотекой регулярных выражений .
Возможности API [ править ]
Встроенная UTF-16. поддержка [Примечание 1] | Встроенная UTF-8. поддержка [Примечание 1] | Многострочное сопоставление | Частичное совпадение [Примечание 2] | |
---|---|---|---|---|
Boost.Регулярное выражение | Нет | Нет | Да | Да |
GLib /GRegex | Да | Да | Да | Да |
РХП | Да | Да | Нет | Да |
в отделении интенсивной терапии регулярное выражение | Да | Нет | Да | ? |
Ява | Да [Примечание 3] | Да [Примечание 3] | Да | Да |
.СЕТЬ | Нет [Примечание 4] | Да | Да | ? |
ПКРЕ | Да [Примечание 5] | Да | Да | Да |
Qt /QRegExp | Да | Нет | Нет | Да [Примечание 6] |
Qt /QRegularExpression | Да | Да | Да | Да |
Ткл | Да | Да [Примечание 7] | Да | ? |
ТРИ | Да | Да | Да | ? |
РГКС | Нет | Нет | Да | ? |
wxWidgets :: wxRegEx [Примечание 8] | Да | Да | Да | ? |
XRegExp | Да | Да | Да | Нет |
- ^ Jump up to: Перейти обратно: а б Означает, что формат можно использовать внутри страны без явного преобразования.
- ^ Частичное совпадение всего регулярного выражения. Например, шаблон «.*END$» будет частично соответствовать любой строке, но только строкам, оканчивающимся на END полностью. [1] .
- ^ Jump up to: Перейти обратно: а б Поддерживает стандарт Unicode 15.0 с 2023 года . [2] .
- ^ Реализация использует исходную поддержку/функции UCS-2 , поэтому распознает всего только 64 КБ символов (по сравнению с UTF-16 1 112 064 символами ). Представитель разработчика Microsoft в 2010 году ответил на сообщение об ошибке «не будет исправлено». [3] .
- ^ Начиная с версии 8.30.
- ^ Частичное сопоставление выполняется неявно, требуя отдельного вызова matchedLength(), если точное совпадение не удалось.
- ^ Tcl включает в себя средства преобразования в UTF-8 и обратно.
- ^ wxRegEx использует любую системную библиотеку POSIX или, если она недоступна, а для режима Unicode использует Генри Спенсера . библиотеку
См. также [ править ]
Ссылки [ править ]
- ^ «Начало работы – документация Hyperscan 5.4.0» .
- ^ «Регулярное выражение — регулярные выражения в OCaml» .
- ^ «UTS № 18: Регулярные выражения Юникода» .
- ^ «ECMA-262, 9-е издание, июнь 2018 г. Спецификация языка ECMAScript® 2018» . www.ecma-international.org . Проверено 4 августа 2020 г.
Внешние ссылки [ править ]
- Сравнение разновидностей регулярных выражений — подробное сравнение наиболее популярных разновидностей регулярных выражений.
- Сводка синтаксиса регулярных выражений
- Онлайн-тестирование регулярных выражений — с поддержкой Java, JavaScript, .Net, PHP, Python и Ruby.
- Реализация регулярных выражений — серия статей Расса Кокса, автора RE2.
- Механизмы регулярных выражений