Сравнение движков регулярных выражений - Comparison of regular-expression engines

Это сравнение регулярное выражение двигатели.

Библиотеки

Список библиотек регулярных выражений
имяОфициальный веб-сайтЯзык программированияЛицензия на программное обеспечениеИспользован
Увеличение.Regex[Примечание 1]Библиотеки Boost C ++C ++УвеличениеБлокнот ++> = 6.0.0, EmEditor
Boost.XpressiveБиблиотеки Boost C ++C ++Увеличение 
CL-PPCREЭди ВайцCommon LispBSD 
cppreДжефф СтюартC ++GPL 
DEELXRegExLabC ++Бесплатное личное и коммерческое использование 
FREJ[Заметка 2]Нечеткие регулярные выражения для JavaЯваLGPL 
GLib / GRegex[Заметка 3]Справочное руководство по GLibCLGPL 
ГРЕТАMicrosoft ResearchC ++? 
GregexGrovf Inc.RTL, HLSПроприетарныйFPGA ускоряет механизм регулярных выражений> 100 Гбит / с для кибербезопасности, финансов и электронной коммерции.
RXPТитан ICRTLПроприетарныйаппаратное ускорение поиска с использованием RegEx, доступное для ASIC, FPGA и облака. Обеспечивает массовую параллельную обработку контента на сверхвысоких скоростях.
ГиперсканированиеIntelC, x86 -специальная сборка (SSSE3 +[1])3-пункт BSDRspamd
ICUМеждународные компоненты для UnicodeC, C ++[Примечание 4]ICUФонд (Версии Apple и Swift с открытым исходным кодом)
Джакарта / RegexpПроект Apache JakartaЯваApache 
java.util.regexРуководство пользователя JavaЯваGNU GPLv2 с исключением пути к классамjEdit
JRegexJRegexЯваBSD 
MATLABОбычные выраженияMATLAB языкMATLAB, язык технических вычислений 
ОнигурумаКосакоCBSDАтом, Взять командную консоль, Тера Срок, TextMate, Возвышенный текст, SubEthaEdit, EmEditor и jq
Онигмо (Oniguruma-мод)OnigmoCBSDРубин
ПаттвоСтивесофтJava (совместим с Java 1.0)LGPL 
PCREpcre.orgC, C ++[Примечание 5]BSDHTTP-сервер Apache, Nginx, BBEdit, Юля, HHVM, Блокнот ++ <6.0.0, PHP, Delphi, р
Qt / QRegExpDigiaC ++Qt GNU GPL версии 3.0,

Qt GNU LGPL версии 2.1,Qt Commercial

Кейт, Kile
регулярное выражение - Генри Спенсер библиотеки регулярных выраженийArgListCBSD 
RE2RE2C ++BSDИдти, Google Таблицы, Gmail, G Suite
Генри Спенсер Расширенные регулярные выраженияTclCBSD 
RGXRGX Библиотека компонентов на основе C ++P6R 
SubRegМэтт БакнеллCМассачусетский технологический институт 
TPerlRegExКомпонент TPerlRegEx VCLObject PascalMPLv1.1 
TRE[Заметка 2]Вилле ЛаурикариCBSDмусл
TRegExprRegExp StudioObject PascalДвойная лицензия: бесплатное ПО или LGPL с исключением статического связыванияTotal Commander
XRegExpXRegExpJavaScriptМассачусетский технологический институт 
Язык Wolfram Language (Mathematica )Центр документации языка Wolfram LanguageЯзык Wolfram LanguageMathematica, то Платформа разработки Wolfram
  1. ^ Ранее назывался Regex ++.
  2. ^ а б Один из нечеткое регулярное выражение двигатели.
  3. ^ Включено с версии 2.13.0.
  4. ^ ICU4J, версия Java, не поддерживает регулярные выражения.
  5. ^ Привязки C ++ были разработаны Google и официально стали частью PCRE в 2006 году.

Языки

Список языков и фреймворков, включая поддержку регулярных выражений
ЯзыкОфициальный веб-сайтЛицензия на программное обеспечениеЗамечания
ActionScript 3Центр технологий ActionScriptСвободный
APL (APLX, Дьялог, GNU)APL WikiЛицензировано соответствующей реализацией⎕SS (PCRE), ⎕R/⎕S (PCRE), ⎕SS (PCRE2) соответственно
C ++ 11 (C ++ )Веб-сайт стандартов C ++Лицензировано соответствующей реализациейНачиная с ISO14822: 2011 (e), аналогично ECMAScript по умолчанию (Грамматическое описание)
DDЛицензия на программное обеспечение Boost[Примечание 1]
ИдтиGolang.orgBSD-стиль
HaskellHaskell.orgBSD3Опускается в языковом отчете и в иерархических библиотеках GHC.
ЯваЯваСтандартная общественная лицензия GNURE записываются в виде строк в исходном коде: все обратные косые черты должны быть удвоены, что ухудшает читаемость.
JavaScript (ECMAScript )ECMA-262BSD3Ограничено, но RE являются первоклассными гражданами языка с особым /.../mod синтаксис.
ЮляJuliaLang.orgЛицензия MITRE являются частью базовой библиотеки языка, использующей встроенный PCRE, и доступна дополнительная оболочка для (кода C) ICU.
LuaLua.orgЛицензия MITИспользует упрощенный, ограниченный диалект; может быть привязан к более мощной библиотеке, такой как PCRE, или альтернативному парсеру, например LPeg.
MathematicaВольфрамПроприетарный
.СЕТЬMSDNЛицензия MIT[Заметка 2][Заметка 3]
Нимnim-lang.orgЛицензия MITСтандартная библиотека включает PCRE на основе повторно и Nre модули, а также различные альтернативы (напр. Strutils, колышки (Анализ грамматики выражений соответствие), strscans, parseutils, так далее.).
Free Pascal (Object Pascal )www.freepascal.orgLGPL с исключением статической ссылкиFree Pascal 2.6+ поставляется с TRegExpr от Сорокина и двумя другими библиотеками регулярных выражений; Увидеть wiki.lazarus.freepascal.org/Regexpr.
OCamlCamlLGPLПо состоянию на 2010 г., стандартный модуль обычно считается устаревшим;[2] часто рекомендуемые библиотеки pcre (с полной поддержкой PCRE) и повторно (который не так полон, но требует лучшей производительности и предоставляет интерфейсы для популярных синтаксисов: PCRE, Perl, Posix, Emacs, подстановки оболочки).
PerlPerl.comХудожественная лицензия, или Стандартная общественная лицензия GNUПолная, центральная часть языка
PHPPHP.netЛицензия PHPИмеет две реализации, причем PCRE является более эффективным по скорости, функции
POSIX C (C )Интернет-публикация POSIX.1Лицензировано соответствующей реализациейПоддерживает POSIX BRE и ERE синтаксис
Pythonpython.orgЛицензия Python Software FoundationPython имеет две основные реализации: встроенный повторно и регулярное выражение библиотека.
Рубинruby-doc.orgСтандартная общественная лицензия для библиотеки GNURuby 1.8, Ruby 1.9, Ruby 2.0 и более поздние версии используют разные механизмы; Ruby 1.9 интегрирует Oniguruma, Ruby 2.0 и позже интегрирует Onigmo, форк от Oniguruma.
Ржавчинаdocs.rsЛицензия MITКрейт основного регулярного выражения не позволяет использовать выражения просмотра. Есть переплет Онигурума, который называется Onig это делает.
SAP ABAPSAP.comПроприетарный
Tcltcl.tkЛицензия Tcl / Tk
(В стиле BSD)
Библиотека Tcl служит также библиотекой регулярных выражений.
Язык Wolfram LanguageWolfram ResearchПроприетарный: можно бесплатно использовать в ограниченном масштабе на платформе разработки Wolfram.
Схема XMLW3CЛицензировано соответствующей реализацией
XPath 3 /XQueryW3CЛицензировано соответствующей реализацией

Особенности языка

НОТА: Приложение, использующее библиотеку для поддержки регулярных выражений, не обязательно предлагает полный набор функций библиотеки, например GNU grep, использующий PCRE, не поддерживает опережающий просмотр, хотя PCRE поддерживает.

Часть 1

Сравнение языковых характеристик (часть 1)
"+" квантификаторОтрицательные классы персонажейНежадные кванторы
[Примечание 1]
Застенчивые группы
[Заметка 2]
РекурсияСмотреть впередСмотреть заОбратные ссылки
[Заметка 3]
> 9 индексируемых снимков
Boost.Regexдадададада[Примечание 4]дададада
Boost.Xpressiveдадададада[Примечание 5]дададада
CL-PPCREдадададаНетдададада
EmEditorдадададаНетдададаНет
FREJНет[Примечание 6]НетНемного[Примечание 6]даНетНетНетдада
GLib / GRegexдадададададададада
GNU grepдадададаНетдадада?
HaskellдадададаНетдададада
RXPдадададаНетНетНетдада
ICU Регулярное выражениедадададаНетдададада
ЯвададададаНетдададада
JavaScript (ECMAScript )дадададаНетдада[Примечание 7]дада
JGsoftдадададаНетдададада
LuaдадаНемного[Примечание 8]НетНетНетНетдаНет
.СЕТЬдадададаНетдададада
OCamlдадаНетНетНетНетНетдаНет
PCREдадададададададада
Perlдадададададададада
PHPдадададададададада
Pythonдадададада[Примечание 9]дададада
Qt / QRegExpдадададаНетдаНетдада
RE2дадададаНетНетНетНетда
Рубин / Онигмодадададададададада
TREдадададаНетНетНетдаНет
VimдадададаНетдададаНет
RGXдадададаНетдададада
TclдадададаНетдададада
TRegExprда?да??????
Схема XMLдадаНетНет данныхНетНетНетНетНет данных
XPath 3 /XQueryдадададаНетНетНетдада
XRegExpдадададаНетдаНетдада
  1. ^ Не жадный квантификаторы соответствуют как можно меньшему количеству символов вместо максимального количества по умолчанию. Обратите внимание, что многие старые, до-POSIX двигатели не были жадными и вообще не имели жадных квантификаторов.
  2. ^ Застенчивые группы, также называется не захватывающий на группы нельзя ссылаться с помощью обратных ссылок; группы без захвата используются для ускорения сопоставления, когда к содержимому группы не требуется доступ позже.
  3. ^ Обратные ссылки включить ссылку на ранее сопоставленные группы в более поздних частях регулярного выражения и / или замещающей строки (если применимо). Например, ([ab] +) 1 соответствует «abab», но не «abaab».
  4. ^ http://www.boost.org/doc/libs/1_47_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html#boost_regex.syntax.perl_syntax.recursive_expressions
  5. ^ http://www.boost.org/doc/libs/1_47_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.grammars_and_nested_matches.embedding_a_regex_by_reference
  6. ^ а б FREJ не имеет повторяющихся квантификаторов, но имеет «необязательный» элемент, который ведет себя аналогично простому «?» квантификатор.
  7. ^ По состоянию на ES2018
  8. ^ Единственный нежадный квантификатор Lua - -, который является нежадной версией *. У него нет нежадных версий + или ?; в первом случае нежадный эффект может быть достигнут путем повторения токена, за которым следует -, но в последнем случае эквивалента нет.
  9. ^ Поддерживается дополнительным регулярное выражение только библиотека.

Часть 2

Сравнение языковых характеристик (часть 2)
Директивы
[Примечание 1]
УсловныеАтомные группы
[Заметка 2]
Именованный захват
[Заметка 3]
КомментарииВстроенный кодUnicode поддержка собственности [3]Балансирующие группы
[Примечание 4]
Ретроспективы переменной длины
[Примечание 5]
Boost.RegexдададададаНетНемного[Примечание 6]НетНет
Boost.XpressiveдаНетдададаНетНетНетНет
CL-PPCREдадададададаНемного[Примечание 6]НетНет
EmEditorдада??даНет?НетНет
FREJНетНетдададаНет?НетНет
GLib / GRegexдададададаНетНемного[Примечание 6]НетНет
GNU grepдада?дадаНетНетНетНет
Haskell?????НетНетНетНет
RXPдадаНетдадаНетНетНетНет
ICU Регулярное выражениедаНетдада[Примечание 7]даНетдаНетНет
ЯвадаНетдада[Примечание 8]даНетНемного[Примечание 6]НетНет
JavaScript (ECMAScript )НетНетНетНетНетНетНемного[Примечание 6][Примечание 9][4]НетНет
JGsoftдададададаНетНемного[Примечание 6]Нетда
LuaНетНетНетНетНетНетНетНетНет
.СЕТЬдададададаНетНемного[Примечание 6]дада
OCamlНетНетНетНетНетНетНетНетНет
PCREдададададададаНетНет
PerlдададададададаНетНет[Примечание 10]
PHPдададададаНетНетНетНет
Pythonдадада[Примечание 11]дадаНетда[Примечание 12]Нетда[Примечание 11]
Qt / QRegExpНетНетНетНетНетНетНетНетНет
RE2даНет?даНетНетНемного[Примечание 6]НетНет
Рубин / ОнигмодадададададаНемного[Примечание 6]НетНет
TclдаНетдаНетдаНетдаНетНет
TREдаНетНетНетдаНет?НетНет
VimдаНетдаНетНетНетНетНетда
RGXдададададаНетдаНетНет
Схема XMLНетНетНетНетНетНетдаНетНет
XPath 3 /XQueryНетНетНетНетНетНетдаНетНет
XRegExpТолько ведущийНетНетдадаНетдаНетНет
  1. ^ Также известен как модификаторы флагов, модификаторы режимов или варианты букв. Пример шаблона: «(? I: test)».
  2. ^ Также называется независимые подвыражения.
  3. ^ Подобно обратным ссылкам, но с именами вместо индексов.
  4. ^ Специальная функция, позволяющая сопоставлять сбалансированные конструкции без рекурсии.
  5. ^ Относится к возможности включения кванторов в ретроспективы, что делает их длину непредсказуемой.
  6. ^ а б c d е ж г час я Поддержка свойств Unicode может быть неполной (продукты постоянно обновляются!). Все будет неполным при выпуске новой версии Unicode до тех пор они обновлены, чтобы соответствовать.
  7. ^ Доступно с ICU55.
  8. ^ Доступно с JDK7.
  9. ^ Поддержка и набор свойств зависят от реализации.
  10. ^ Экспериментальная поддержка добавлена ​​в v5.29.9.
  11. ^ а б Поддерживается дополнительным регулярное выражение только библиотека.
  12. ^ Может быть доступен только в библиотеке регулярных выражений при использовании с версиями Python после 3.3.

Возможности API

Сравнение функций API
Родной UTF-16 поддержка[Примечание 1]Родной UTF-8 поддержка[Примечание 1]Многострочное соответствиеЧастичное совпадение[Заметка 2]
Boost.RegexНетНетдада
GLib / GRegexдададада
RXPдадаНетда
ICU Регулярное выражениедаНетда?
ЯваНетЧастичное[Заметка 3]дада
.СЕТЬНет[Примечание 4]дада?
PCREда[Примечание 5]дадада
Qt / QRegExpдаНетНет?
Tclдада[Примечание 6]да?
TREдадада?
RGXНетНетда?
wxWdigets::wxRegEx[Примечание 7]дадада?
XRegExpда?да?
  1. ^ а б Означает, что формат можно использовать внутри компании без явного преобразования.
  2. ^ Частичное совпадение всего регулярного выражения. Например, шаблон «. * END $» будет частично соответствовать любой строке, но только строкам, полностью оканчивающимся на END.[1].
  3. ^ Поддерживает стандарт Unicode 4.0 с 2003 года; последние планы для JDK7 включают поддержку Unicode 6.0 (2011).[2].
  4. ^ Реализация использует оригинальные UCS-2 support / features, поэтому он распознает всего 64K символов (vs UTF-16 1,112,064 символа). Представитель разработчика Microsoft ответил на отчет об этой ошибке, как «не исправит» в 2010 году.[3].
  5. ^ Начиная с версии 8.30.
  6. ^ Tcl включает средства для преобразования в UTF-8 и обратно.
  7. ^ wxRegEx использует любую предоставленную систему POSIX библиотека или, если она недоступна, и для режима Unicode использует Генри Спенсер библиотека.

Смотрите также

использованная литература

  1. ^ https://intel.github.io/hyperscan/dev-reference/getting_started.html#requirements
  2. ^ [4]
  3. ^ https://www.unicode.org/reports/tr18/
  4. ^ "ECMA-262, 9-е издание, июнь 2018 г. Спецификация языка ECMAScript® 2018". www.ecma-international.org. Получено 4 августа 2020.

внешние ссылки