Перейти к навигации Перейти к поиску
Эта статья поднимает множество проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалить эти сообщения-шаблоны ) ( Узнайте, как и когда удалить этот шаблон сообщения )
|
Это сравнение движков регулярных выражений .
Библиотеки [ править ]
Имя | Официальный веб-сайт | Язык программирования | Лицензия на программное обеспечение | Использован |
---|---|---|---|---|
Boost .Regex [Примечание 1] | Библиотеки Boost C ++ | C ++ | Способствовать росту | Блокнот ++> = 6.0.0, EmEditor |
Boost.Xpressive | Библиотеки Boost C ++ | C ++ | Способствовать росту | |
CL-PPCRE | Эди Вайц | Common Lisp | BSD | |
cppre | Джефф Стюарт | C ++ | GPL | |
DEELX | RegExLab | C ++ | Бесплатное личное и коммерческое использование | |
FREJ [Примечание 2] | Нечеткие регулярные выражения для Java | Ява | LGPL | |
GLib / GRegex [Примечание 3] | Справочное руководство по GLib | C | LGPL | |
ГРЕТА | Microsoft Research | C ++ | Microsoft | |
Gregex | Grovf Inc. | RTL, HLS | Проприетарный | FPGA ускоренный механизм регулярных выражений> 100 Гбит / с для кибербезопасности, финансов и электронной коммерции. |
RXP | Титан IC | RTL | Проприетарный | аппаратное ускорение поиска с использованием RegEx, доступное для ASIC, FPGA и облака. Обеспечивает массовую параллельную обработку контента на сверхвысоких скоростях. |
Гиперскан | Intel | C, специфичная для x86 сборка ( SSSE3 + [1] ) | 3-пункт BSD | Rspamd |
ICU | Международные компоненты для Unicode | C, C ++ [Примечание 4] | ICU | Foundation (версии с открытым исходным кодом для Apple и Swift) |
Джакарта / Regexp | Проект Apache Jakarta | Ява | Apache | |
java.util.regex | Руководство пользователя Java | Ява | GNU GPLv2 с исключением пути к классам | jEdit |
JRegex | JRegex | Ява | BSD | |
MATLAB | Обычные выражения | MATLAB язык | MATLAB, язык технических вычислений | |
Онигурума | Косако | C | BSD | Atom , Take Command Console , Tera Term , TextMate , Sublime Text , SubEthaEdit , EmEditor и jq |
Онигмо (Oniguruma-мод) | Onigmo | C | BSD | Рубин |
Паттво | Стивесофт | Java (совместим с Java 1.0) | LGPL | |
PCRE | pcre.org | C, C ++ [Примечание 5] | BSD | HTTP-сервер Apache , Nginx , BBEdit , Julia , HHVM , Notepad ++ <6.0.0, PHP , Delphi , R |
Qt / QRegExp | Digia | C ++ | Qt GNU GPL v. 3.0 , Qt GNU LGPL v. 2.1 , Qt Commercial | Кейт , Кайл |
regex - библиотеки регулярных выражений Генри Спенсера | ArgList | C | BSD | |
RE2 | RE2 | C ++ | BSD | Go , Google Таблицы, Gmail, G Suite |
Расширенные регулярные выражения Генри Спенсера | Tcl | C | BSD | |
RGX | RGX | Библиотека компонентов на основе C ++ | P6R | |
SubReg | Мэтт Бакнэлл | C | Массачусетский технологический институт | |
TPerlRegEx | Компонент TPerlRegEx VCL | Object Pascal | MPLv1.1 | |
TRE [Примечание 2] | Вилле Лаурикари | C | BSD | мусл |
TRegExpr | RegExp Studio | Object Pascal | Двойная лицензия: бесплатное ПО или LGPL с исключением статической привязки | Total Commander |
XRegExp | XRegExp | JavaScript | Массачусетский технологический институт | |
Язык Wolfram Language ( Математика ) | Центр документации языка Wolfram Language | Язык Wolfram Language | Mathematica , платформа разработки Wolfram |
- ^ Ранее назывался Regex ++.
- ^ a b Один из движков нечетких регулярных выражений .
- ^ Включено, начиная с версии 2.13.0.
- ^ ICU4J, версия для Java, не поддерживает регулярные выражения.
- ^ Привязки C ++ были разработаны Google и официально стали частью PCRE в 2006 году.
Языки [ править ]
Язык | Официальный веб-сайт | Лицензия на программное обеспечение | Замечания |
---|---|---|---|
ActionScript 3 | Центр технологий ActionScript | Свободный | |
APL ( APLX , Dyalog , GNU) | APL Wiki | Лицензировано соответствующей реализацией | ⎕SS (PCRE), ⎕R / ⎕S (PCRE), ⎕SS (PCRE2) соответственно |
C ++ 11 ( C ++ ) | Веб-сайт стандартов C ++ | Лицензировано соответствующей реализацией | Начиная с ISO14822: 2011 (e), аналогично ECMAScript по умолчанию (описание грамматики) |
D | D | Лицензия на программное обеспечение Boost [Примечание 1] | |
Идти | Golang.org | BSD-стиль | |
Haskell | Haskell.org | BSD3 | Опускается в языковом отчете и в иерархических библиотеках GHC. |
Ява | Ява | Стандартная общественная лицензия GNU | RE записываются в виде строк в исходном коде: все обратные косые черты должны быть удвоены, что ухудшает читаемость. |
JavaScript ( ECMAScript ) | ECMA-262 | BSD3 | Ограничено, но RE являются первоклассными гражданами языка с особым /.../mod синтаксисом. |
Юля | JuliaLang.org | Лицензия MIT | RE являются частью базовой библиотеки языка, использующей встроенный PCRE, и доступна дополнительная оболочка для (кода C) ICU. |
Lua | Lua.org | Лицензия MIT | Использует упрощенный, ограниченный диалект; может быть привязан к более мощной библиотеке, такой как PCRE, или альтернативному синтаксическому анализатору, например LPeg. |
Mathematica | Вольфрам | Проприетарный | |
.СЕТЬ | MSDN | Лицензия MIT [Примечание 2] [Примечание 3] | |
Ним | nim-lang.org | Лицензия MIT | Стандартная библиотека включает в себя PCRE на основе ре и Nre модулей, а также различные варианты (напр. Strutils , штырьки ( Разбор выражений Грамматика соответствия), strscans , parseutils и т.д.). |
Свободный Паскаль ( Object Pascal ) | www.freepascal.org | LGPL с исключением статического связывания | Free Pascal 2.6+ поставляется с TRegExpr от Сорокина и двумя другими библиотеками регулярных выражений; См. Wiki.lazarus.freepascal.org/Regexpr . |
OCaml | Caml | LGPL | С 2010 [Обновить]года стандартный модуль считается устаревшим; [2] часто рекомендуются библиотеки pcre (с полной поддержкой PCRE) и re (которые не так полны, но претендуют на лучшую производительность и предоставляют интерфейсы для популярных синтаксисов: PCRE, Perl, Posix, Emacs, подстановки оболочки). |
Perl | Perl.com | Художественная лицензия или Стандартная общественная лицензия GNU | Полная, центральная часть языка |
PHP | PHP.net | Лицензия PHP | Имеет две реализации, при этом PCRE является более эффективным по скорости, функции |
POSIX C ( C ) | Интернет-публикация POSIX.1 | Лицензировано соответствующей реализацией | Поддерживает синтаксис POSIX BRE и ERE |
Python | python.org | Лицензия Python Software Foundation | 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 | Лицензия MIT | Крейт основного регулярного выражения не позволяет использовать выражения просмотра. Есть привязка Oniguruma, которая называется onig . |
SAP ABAP | SAP.com | Проприетарный | |
Tcl | tcl.tk | Лицензия Tcl / Tk (в стиле BSD) | Библиотека Tcl также является библиотекой регулярных выражений. |
Язык Wolfram Language | Wolfram Research | Собственный : можно бесплатно использовать в ограниченном масштабе на платформе разработки Wolfram. | |
Схема XML | W3C | Лицензировано соответствующей реализацией | |
XPath 3 / XQuery | W3C | Лицензировано соответствующей реализацией |
- ^ http://www.digitalmars.com/d/2.0/phobos/std_regex.html
- ^ https://github.com/dotnet/corefx/blob/7116584186f8f3a886616aaf8cb5d4a982c60e27/src/System.Text.RegularExpressions/src/System/Text/RegularExpressions/Regex.cs#L2
- ^ https://github.com/dotnet/corefx#license
Особенности языка [ править ]
ПРИМЕЧАНИЕ. Приложение, использующее библиотеку для поддержки регулярных выражений, не обязательно предлагает полный набор функций библиотеки, например, GNU grep, использующий PCRE, не предлагает поддержки упреждающего просмотра, хотя PCRE делает.
Часть 1 [ править ]
"+" квантификатор | Отрицательные классы персонажей | Нежадные кванторы [Примечание 1] | Застенчивые группы [Примечание 2] | Рекурсия | Смотреть вперед | Смотреть за | Обратные ссылки [Примечание 3] | > 9 индексируемых снимков | |
---|---|---|---|---|---|---|---|---|---|
Boost.Regex | да | да | да | да | Да [Примечание 4] | да | да | да | да |
Boost.Xpressive | да | да | да | да | Да [Примечание 5] | да | да | да | да |
CL-PPCRE | да | да | да | да | Нет | да | да | да | да |
EmEditor | да | да | да | да | Нет | да | да | да | Нет |
FREJ | Нет [Примечание 6] | Нет | Некоторые [Примечание 6] | да | Нет | Нет | Нет | да | да |
GLib / GRegex | да | да | да | да | да | да | да | да | да |
GNU grep | да | да | да | да | Нет | да | да | да | ? |
Haskell | да | да | да | да | Нет | да | да | да | да |
RXP | да | да | да | да | Нет | Нет | Нет | да | да |
ICU Regex | да | да | да | да | Нет | да | да | да | да |
Ява | да | да | да | да | Нет | да | да | да | да |
JavaScript ( ECMAScript ) | да | да | да | да | Нет | да | Да [Примечание 7] | да | да |
JGsoft | да | да | да | да | Нет | да | да | да | да |
Lua | да | да | Некоторые [Примечание 8] | Нет | Нет | Нет | Нет | да | Нет |
.СЕТЬ | да | да | да | да | Нет | да | да | да | да |
OCaml | да | да | Нет | Нет | Нет | Нет | Нет | да | Нет |
PCRE | да | да | да | да | да | да | да | да | да |
Perl | да | да | да | да | да | да | да | да | да |
PHP | да | да | да | да | да | да | да | да | да |
Python | да | да | да | да | Да [Примечание 9] | да | да | да | да |
Qt / QRegExp | да | да | да | да | Нет | да | Нет | да | да |
RE2 | да | да | да | да | Нет | Нет | Нет | Нет | да |
Рубин / Онигмо | да | да | да | да | да | да | да | да | да |
TRE | да | да | да | да | Нет | Нет | Нет | да | Нет |
Vim | да | да | да | да | Нет | да | да | да | Нет |
RGX | да | да | да | да | Нет | да | да | да | да |
Tcl | да | да | да | да | Нет | да | да | да | да |
TRegExpr | да | ? | да | ? | ? | ? | ? | ? | ? |
Схема XML | да | да | Нет | N / A | Нет | Нет | Нет | Нет | N / A |
XPath 3 / XQuery | да | да | да | да | Нет | Нет | Нет | да | да |
XRegExp | да | да | да | да | Нет | да | Нет | да | да |
- ^ Нежадные квантификаторы соответствуют как можно меньшему количеству символов вместо максимального количества по умолчанию. Обратите внимание, что многие старыемеханизмы, предшествующие POSIX, были не жадными и вообще не имели жадных квантификаторов.
- ^ Застенчивые группы , также называемые группами без захвата, нельзя ссылаться на обратные ссылки; группы без захвата используются для ускорения сопоставления, когда к содержимому группы не требуется доступ позже.
- ^ Обратные ссылки позволяют ссылаться на ранее сопоставленные группы в более поздних частях регулярного выражения и / или замещающей строки (если применимо). Например, ([ab] +) \ 1 соответствует «abab», но не «abaab».
- ^ 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
- ^ 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
- ^ a b FREJ не имеют повторяющихся квантификаторов, но имеют «необязательный» элемент, который ведет себя аналогично простому «?» квантификатор.
- ^ По состоянию на ES2018
- ^ Единственный нежадный квантификатор Lua
-
- это нежадная версия*
. У него нет нежадных версий+
или?
; в первом случае нежадный эффект может быть достигнут повторением токена, за которым следует-
, но во втором случае нет эквивалента. - ^ Поддерживается только необязательнойбиблиотекой регулярных выражений .
Часть 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 Regex | да | Нет | да | Да [Примечание 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 | Только ведущий | Нет | Нет | да | да | Нет | да | Нет | Нет |
- ^ Также известный как флаги модификаторов , режимы модификаторов или опционных букв . Пример шаблона: «(? I: test)».
- ^ Также называется независимыми подвыражениями .
- ^ Аналогично обратным ссылкам, но с именами вместо индексов.
- ^ Специальная функция, позволяющая сопоставить сбалансированные конструкции без рекурсии.
- ^ Относится к возможности включения кванторов в ретроспективы, что делает их длину непредсказуемой.
- ^ a b c d e f g h i Поддержка свойств Unicode может быть неполной (продукты постоянно обновляются!). Все будет неполным, когда будет выпущена новая версия Unicode, пока они не будут обновлены для соответствия.
- ^ Доступно с ICU55.
- ^ Доступно с JDK7.
- ^ Поддержка и набор свойств зависят от реализации.
- ^ Экспериментальная поддержка добавлена в v5.29.9.
- ^ a b Поддерживается только дополнительной библиотекой регулярных выражений .
- ^ Может быть доступен только в библиотеке регулярных выражений при использовании с версиями Python после 3.3.
Возможности API [ править ]
Родная UTF-16 Поддержка [Примечание 1] | Native UTF-8 поддержка [Примечание 1] | Многострочное соответствие | Частичное совпадение [Примечание 2] | |
---|---|---|---|---|
Boost.Regex | Нет | Нет | да | да |
GLib / GRegex | да | да | да | да |
RXP | да | да | Нет | да |
ICU Regex | да | Нет | да | ? |
Ява | Нет | Частично [Примечание 3] | да | да |
.СЕТЬ | Нет [Примечание 4] | да | да | ? |
PCRE | Да [Примечание 5] | да | да | да |
Qt / QRegExp | да | Нет | Нет | ? |
Tcl | да | Да [Примечание 6] | да | ? |
TRE | да | да | да | ? |
RGX | Нет | Нет | да | ? |
wxWdigets :: wxRegEx [Примечание 7] | да | да | да | ? |
XRegExp | да | ? | да | ? |
- ^ a b Означает, что формат можно использовать внутри компании без явного преобразования.
- ^ Частичное совпадение всего регулярного выражения. Например, шаблон «. * END $» будет частично соответствовать любой строке, но только строкам, полностью оканчивающимся на END. [1] .
- ^ Поддерживает стандарт Unicode 4.0 с 2003 г .; последние планы для JDK7 включают поддержку Unicode 6.0 (2011). [2] .
- ^ Реализация использует оригинальнуюподдержку / функции UCS-2 , поэтому она распознает только 64 КБ символов (против1112 064 символа UTF-16 ). Представитель разработчика Microsoft ответил в отчете об этой ошибке как «не исправит» в 2010 году [3] .
- ^ Начиная с версии 8.30.
- ^ Tcl включает средства для преобразования в UTF-8 и обратно.
- ^ wxRegEx использует любую системнуюбиблиотеку POSIX или, если она недоступна, и для режима Unicode используетбиблиотеку Генри Спенсера .
См. Также [ править ]
- Регулярное выражение § Реализации и время выполнения
Ссылки [ править ]
- ^ https://intel.github.io/hyperscan/dev-reference/getting_started.html#requirements
- ^ [4]
- ^ https://www.unicode.org/reports/tr18/
- ^ «ECMA-262, 9-е издание, июнь 2018 г. Спецификация языка ECMAScript® 2018» . www.ecma-international.org . Дата обращения 4 августа 2020 .
Внешние ссылки [ править ]
- Сравнение вкусов регулярных выражений - подробное сравнение самых популярных разновидностей регулярных выражений.
- Сводка синтаксиса регулярного выражения
- Онлайн-тестирование регулярных выражений - с поддержкой Java, JavaScript, .Net, PHP, Python и Ruby
- Реализация регулярных выражений - цикл статей Расс Кокса, автора RE2
- Механизмы регулярных выражений