Porovnání motorů s regulárním výrazem - Comparison of regular-expression engines
![]() | Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto otázkách na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
Tohle je srovnání regulární výraz motory.
Knihovny
název | Oficiální webové stránky | Programovací jazyk | Softwarová licence | Používá |
---|---|---|---|---|
Zvýšit.Regex[Poznámka 1] | Zvyšte knihovny C ++ | C ++ | Zvýšit | Poznámkový blok ++> = 6.0.0, EmEditor |
Boost.Xpressive | Zvyšte knihovny C ++ | C ++ | Zvýšit | |
CL-PPCRE | Edi Weitz | Společný Lisp | BSD | |
cppre | Jeff Stuart | C ++ | GPL | |
DEELX | RegExLab | C ++ | Zdarma osobní a komerční použití | |
FREJ[Poznámka 2] | Fuzzy regulární výrazy pro Javu | Jáva | LGPL | |
GLib / GRegex[Poznámka 3] | Referenční příručka GLib | C | LGPL | |
GRETA | Microsoft Research | C ++ | ? | |
Gregex | Grovf Inc. | RTL, HLS | Proprietární | FPGA zrychlený> 100 Gbit / s regex engine pro kybernetickou bezpečnost, finanční odvětví a elektronický obchod. |
RXP | Titan IC | RTL | Proprietární | hardwarově akcelerovaná akcelerace vyhledávání pomocí RegEx dostupná pro ASIC, FPGA a cloud. Umožňuje masivně paralelní zpracování obsahu při ultravysokých rychlostech. |
Hyperscan | Intel | C, x86 - specifická montáž (SSSE3 +[1]) | 3-klauzule BSD | Rspamd |
JIP | Mezinárodní komponenty pro Unicode | C, C ++[Poznámka 4] | JIP | Nadace (Apple a Swift verze s otevřeným zdrojovým kódem) |
Jakarta / Regexp | Projekt Apache Jakarta | Jáva | Apache | |
java.util.regex | Uživatelská příručka Java | Jáva | GNU GPLv2 s výjimkou Classpath | jEdit |
JRegex | JRegex | Jáva | BSD | |
MATLAB | Regulární výrazy | Jazyk MATLAB | MATLAB, jazyk technických výpočtů | |
Oniguruma | Kosako | C | BSD | Atom, Take Command Console, Tera termín, TextMate, Vznešený text, SubEthaEdit, EmEditor a jq |
Onigmo (Oniguruma-mod) | Onigmo | C | BSD | Rubín |
Pattwo | Stevesoft | Java (kompatibilní s Java 1.0) | LGPL | |
PCRE | pcre.org | C, C ++[Poznámka 5] | BSD | Apache HTTP Server, Nginx, BBEdit, Julie, HHVM, Poznámkový blok ++ <6.0.0, PHP, Delphi, R |
Qt / QRegExp | Digia | C ++ | Qt GNU GPL v. 3.0, | Kate, Kile |
regulární výraz - Henry Spencer knihovny regulárních výrazů | ArgList | C | BSD | |
RE2 | RE2 | C ++ | BSD | Jít, Tabulky Google, Gmail, G Suite |
Henry Spencer Pokročilé regulární výrazy | Tcl | C | BSD | |
RGX | RGX | Knihovna komponent založená na C ++ | P6R | |
SubReg | Matt Bucknall | C | MIT | |
TPerlRegEx | Součást TPerlRegEx VCL | Objekt Pascal | MPLv1.1 | |
TRE[Poznámka 2] | Ville Laurikari | C | BSD | musl |
TRegExpr | Studio RegExp | Objekt Pascal | Duální licence: freeware nebo LGPL s výjimkou statického propojení | Total Commander |
XRegExp | XRegExp | JavaScript | MIT | |
Wolfram jazyk (Mathematica ) | Centrum jazykové dokumentace Wolfram | Wolfram jazyk | Mathematica, Vývojová platforma Wolfram |
Jazyky
Jazyk | Oficiální webové stránky | Softwarová licence | Poznámky |
---|---|---|---|
ActionScript 3 | Technologické centrum ActionScript | Volný, uvolnit | |
APL (APLX, Dyalog, GNU) | APL Wiki | Licencováno příslušnou implementací | ⎕SS (PCRE), .R /⎕S (PCRE), ⎕SS (PCRE2) |
C ++ 11 (C ++ ) | Webové stránky standardů C ++ | Licencováno příslušnou implementací | Od ISO14822: 2011 (e), ve výchozím nastavení podobný ECMAScript (Popis gramatiky) |
D | D | Zvyšte licenci softwaru[Poznámka 1] | |
Jít | Golang.org | BSD styl | |
Haskell | Haskell.org | BSD3 | Vynecháno v jazykové zprávě a v Hierarchických knihovnách GHC |
Jáva | Jáva | GNU General Public License | RE jsou ve zdrojovém kódu psána jako řetězce: všechna zpětná lomítka musí být zdvojnásobena, což poškozuje čitelnost. |
JavaScript (ECMAScript ) | ECMA-262 | BSD3 | Omezené, ale RE jsou prvotřídní občané jazyka se specifickým /.../mod syntax. |
Julie | JuliaLang.org | Licence MIT | RE jsou součástí knihovny jazykového jádra pomocí integrovaného PCRE a je k dispozici volitelný obal pro ICU (kód C). |
Lua | Lua.org | Licence MIT | Používá zjednodušený, omezený dialekt; může být vázán na výkonnější knihovnu, jako je PCRE nebo alternativní analyzátor, jako je LPeg. |
Mathematica | Wolfram | Proprietární | |
.SÍŤ | MSDN | Licence MIT[Poznámka 2][Poznámka 3] | |
Nim | nim-lang.org | Licence MIT | Standardní knihovna zahrnuje PCRE re a nre moduly, stejně jako různé alternativy (např. strutils, kolíky (Analýza gramatiky výrazu vhodný), strscans, parseutils, atd.). |
Free Pascal (Objekt Pascal ) | www.freepascal.org | LGPL s výjimkou statického propojení | Free Pascal 2.6+ je dodáván s TRegExpr od Sorokina a dvou dalších knihoven regulárních výrazů; Vidět wiki.lazarus.freepascal.org/Regexpr. |
OCaml | Caml | LGPL | Od roku 2010[Aktualizace], standardní modul je obecně považován za zastaralý;[2] často doporučené knihovny jsou pcre (s plnou podporou pro PCRE) a re (který není tak úplný, ale vyžaduje lepší výkon a poskytuje rozhraní populárních syntaxí: PCRE, Perl, Posix, Emacs, shell globbing). |
Perl | Perl.com | Umělecká licence nebo GNU General Public License | Plná, centrální část jazyka |
PHP | PHP.net | Licence PHP | Má dvě implementace, přičemž PCRE je rychlejší a efektivnější funkce |
POSIX C (C ) | Webová publikace POSIX.1 | Licencováno příslušnou implementací | Podporuje POSIX BRE a ERE syntax |
Krajta | python.org | Licence Python Software Foundation | Python má dvě hlavní implementace, zabudovanou re a regulární výraz knihovna. |
Rubín | ruby-doc.org | GNU Library General Public License | Ruby 1.8, Ruby 1.9 a Ruby 2.0 a novější verze používají různé motory; Ruby 1.9 integruje Oniguruma, Ruby 2.0 a později integruje Onigmo, vidlici od Oniguruma. |
Rez | docs.rs | Licence MIT | Přepravka primárního regulárního výrazu neumožňuje výrazy rozhlížení. Existuje vazba Oniguruma s názvem onig to ano. |
SAP ABAP | SAP.com | Proprietární | |
Tcl | tcl.tk | Licence Tcl / Tk (Ve stylu BSD) | Knihovna Tcl slouží jako knihovna regulárních výrazů. |
Wolfram jazyk | Wolfram Research | Proprietární: použitelné zdarma v omezeném měřítku na platformě Wolfram Development | |
Schéma XML | W3C | Licencováno příslušnou implementací | |
XPath 3 /XQuery | W3C | Licencováno příslušnou implementací |
Jazykové funkce
POZNÁMKA: Aplikace používající knihovnu pro podporu regulárních výrazů nemusí nutně nabízet celou sadu funkcí knihovny, např. GNU grep, který používá PCRE, nenabízí podporu lookahead, ačkoli PCRE ano.
Část 1
"+" kvantifikátor | Vyloučené třídy postav | Non-chamtivý kvantifikátory [Poznámka 1] | Plaché skupiny [Poznámka 2] | Rekurze | Dívat se dopředu | Pohled do pozadí | Zpětné reference [Poznámka 3] | > 9 indexovatelných snímků | |
---|---|---|---|---|---|---|---|---|---|
Boost.Regex | Ano | Ano | Ano | Ano | Ano[Poznámka 4] | Ano | Ano | Ano | Ano |
Boost.Xpressive | Ano | Ano | Ano | Ano | Ano[Poznámka 5] | Ano | Ano | Ano | Ano |
CL-PPCRE | Ano | Ano | Ano | Ano | Ne | Ano | Ano | Ano | Ano |
EmEditor | Ano | Ano | Ano | Ano | Ne | Ano | Ano | Ano | Ne |
FREJ | Ne[Poznámka 6] | Ne | Nějaký[Poznámka 6] | Ano | Ne | Ne | Ne | Ano | Ano |
GLib / GRegex | Ano | Ano | Ano | Ano | Ano | Ano | Ano | Ano | Ano |
GNU grep | Ano | Ano | Ano | Ano | Ne | Ano | Ano | Ano | ? |
Haskell | Ano | Ano | Ano | Ano | Ne | Ano | Ano | Ano | Ano |
RXP | Ano | Ano | Ano | Ano | Ne | Ne | Ne | Ano | Ano |
JIP Regulární výraz | Ano | Ano | Ano | Ano | Ne | Ano | Ano | Ano | Ano |
Jáva | Ano | Ano | Ano | Ano | Ne | Ano | Ano | Ano | Ano |
JavaScript (ECMAScript ) | Ano | Ano | Ano | Ano | Ne | Ano | Ano[Poznámka 7] | Ano | Ano |
JGsoft | Ano | Ano | Ano | Ano | Ne | Ano | Ano | Ano | Ano |
Lua | Ano | Ano | Nějaký[Poznámka 8] | Ne | Ne | Ne | Ne | Ano | Ne |
.SÍŤ | Ano | Ano | Ano | Ano | Ne | Ano | Ano | Ano | Ano |
OCaml | Ano | Ano | Ne | Ne | Ne | Ne | Ne | Ano | Ne |
PCRE | Ano | Ano | Ano | Ano | Ano | Ano | Ano | Ano | Ano |
Perl | Ano | Ano | Ano | Ano | Ano | Ano | Ano | Ano | Ano |
PHP | Ano | Ano | Ano | Ano | Ano | Ano | Ano | Ano | Ano |
Krajta | Ano | Ano | Ano | Ano | Ano[Poznámka 9] | Ano | Ano | Ano | Ano |
Qt / QRegExp | Ano | Ano | Ano | Ano | Ne | Ano | Ne | Ano | Ano |
RE2 | Ano | Ano | Ano | Ano | Ne | Ne | Ne | Ne | Ano |
Ruby / Onigmo | Ano | Ano | Ano | Ano | Ano | Ano | Ano | Ano | Ano |
TRE | Ano | Ano | Ano | Ano | Ne | Ne | Ne | Ano | Ne |
Vim | Ano | Ano | Ano | Ano | Ne | Ano | Ano | Ano | Ne |
RGX | Ano | Ano | Ano | Ano | Ne | Ano | Ano | Ano | Ano |
Tcl | Ano | Ano | Ano | Ano | Ne | Ano | Ano | Ano | Ano |
TRegExpr | Ano | ? | Ano | ? | ? | ? | ? | ? | ? |
Schéma XML | Ano | Ano | Ne | N / A | Ne | Ne | Ne | Ne | N / A |
XPath 3 /XQuery | Ano | Ano | Ano | Ano | Ne | Ne | Ne | Ano | Ano |
XRegExp | Ano | Ano | Ano | Ano | Ne | Ano | Ne | Ano | Ano |
- ^ Non-chamtivý kvantifikátory se shodují s co nejmenším počtem znaků, místo toho, aby byly výchozí. Všimněte si, že mnoho starších,POSIX motory nebyly chamtivé a vůbec neměly chamtivé kvantifikátory.
- ^ Plaché skupiny, také zvaný nezachycující na skupiny nelze odkazovat se zpětnými odkazy; skupiny, které nezachycují, se používají k urychlení shody, kde k obsahu skupiny není třeba přistupovat později.
- ^ Zpětné reference povolit odkazování na dříve uzavřené skupiny v pozdějších částech regulárního výrazu a / nebo náhradního řetězce (je-li to relevantní). Například, ([ab] +) 1 odpovídá „abab“, ale nikoli „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 nemají žádné opakující se kvantifikátory, ale mají "volitelný" prvek, který se chová podobně jako jednoduchý "?" kvantifikátor.
- ^ Od ES2018
- ^ Luaův jediný nenásytný kvantifikátor je
-
, což je nenásytná verze*
. To nemá non-chamtivý verze+
nebo?
; v prvním případě lze nenásilného efektu dosáhnout opakováním tokenu a následným-
, ale v druhém případě neexistuje žádný ekvivalent. - ^ Podporováno volitelným regulární výraz pouze knihovna.
Část 2
Směrnice [Poznámka 1] | Podmíněné | Atomové skupiny [Poznámka 2] | Pojmenované zachycení [Poznámka 3] | Komentáře | Vložený kód | Unicode podpora majetku [3] | Vyrovnávací skupiny [Poznámka 4] | Hloubky pohledu s proměnnou délkou [Poznámka 5] | |
---|---|---|---|---|---|---|---|---|---|
Boost.Regex | Ano | Ano | Ano | Ano | Ano | Ne | Nějaký[Poznámka 6] | Ne | Ne |
Boost.Xpressive | Ano | Ne | Ano | Ano | Ano | Ne | Ne | Ne | Ne |
CL-PPCRE | Ano | Ano | Ano | Ano | Ano | Ano | Nějaký[Poznámka 6] | Ne | Ne |
EmEditor | Ano | Ano | ? | ? | Ano | Ne | ? | Ne | Ne |
FREJ | Ne | Ne | Ano | Ano | Ano | Ne | ? | Ne | Ne |
GLib / GRegex | Ano | Ano | Ano | Ano | Ano | Ne | Nějaký[Poznámka 6] | Ne | Ne |
GNU grep | Ano | Ano | ? | Ano | Ano | Ne | Ne | Ne | Ne |
Haskell | ? | ? | ? | ? | ? | Ne | Ne | Ne | Ne |
RXP | Ano | Ano | Ne | Ano | Ano | Ne | Ne | Ne | Ne |
JIP Regulární výraz | Ano | Ne | Ano | Ano[Poznámka 7] | Ano | Ne | Ano | Ne | Ne |
Jáva | Ano | Ne | Ano | Ano[Poznámka 8] | Ano | Ne | Nějaký[Poznámka 6] | Ne | Ne |
JavaScript (ECMAScript ) | Ne | Ne | Ne | Ne | Ne | Ne | Nějaký[Poznámka 6][Poznámka 9][4] | Ne | Ne |
JGsoft | Ano | Ano | Ano | Ano | Ano | Ne | Nějaký[Poznámka 6] | Ne | Ano |
Lua | Ne | Ne | Ne | Ne | Ne | Ne | Ne | Ne | Ne |
.SÍŤ | Ano | Ano | Ano | Ano | Ano | Ne | Nějaký[Poznámka 6] | Ano | Ano |
OCaml | Ne | Ne | Ne | Ne | Ne | Ne | Ne | Ne | Ne |
PCRE | Ano | Ano | Ano | Ano | Ano | Ano | Ano | Ne | Ne |
Perl | Ano | Ano | Ano | Ano | Ano | Ano | Ano | Ne | Ne[Poznámka 10] |
PHP | Ano | Ano | Ano | Ano | Ano | Ne | Ne | Ne | Ne |
Krajta | Ano | Ano | Ano[Poznámka 11] | Ano | Ano | Ne | Ano[Poznámka 12] | Ne | Ano[Poznámka 11] |
Qt / QRegExp | Ne | Ne | Ne | Ne | Ne | Ne | Ne | Ne | Ne |
RE2 | Ano | Ne | ? | Ano | Ne | Ne | Nějaký[Poznámka 6] | Ne | Ne |
Ruby / Onigmo | Ano | Ano | Ano | Ano | Ano | Ano | Nějaký[Poznámka 6] | Ne | Ne |
Tcl | Ano | Ne | Ano | Ne | Ano | Ne | Ano | Ne | Ne |
TRE | Ano | Ne | Ne | Ne | Ano | Ne | ? | Ne | Ne |
Vim | Ano | Ne | Ano | Ne | Ne | Ne | Ne | Ne | Ano |
RGX | Ano | Ano | Ano | Ano | Ano | Ne | Ano | Ne | Ne |
Schéma XML | Ne | Ne | Ne | Ne | Ne | Ne | Ano | Ne | Ne |
XPath 3 /XQuery | Ne | Ne | Ne | Ne | Ne | Ne | Ano | Ne | Ne |
XRegExp | Pouze vedoucí | Ne | Ne | Ano | Ano | Ne | Ano | Ne | Ne |
- ^ Také známý jako příznaky modifikátory, modifikátory režimů nebo volitelná písmena. Příklad vzoru: „(? I: test)“.
- ^ Také zvaný nezávislé dílčí výrazy.
- ^ Podobně jako zpětné odkazy, ale s názvy místo indexů.
- ^ Speciální funkce umožňující spojit vyvážené konstrukce bez rekurze.
- ^ Odkazuje na možnost zahrnout kvantifikátory do pozadu, což činí jejich délku nepředvídatelnou.
- ^ A b C d E F G h i Podpora vlastností Unicode nemusí být úplná (produkty jsou průběžně aktualizovány!). Vše bude neúplné při vydání nové revize Unicode dokud jsou aktualizovány, aby vyhovovaly.
- ^ K dispozici od ICU55.
- ^ K dispozici od JDK7.
- ^ Podpora a rozsah vlastností závisí na implementaci.
- ^ Experimentální podpora přidána ve v5.29.9.
- ^ A b Podporováno volitelným regulární výraz pouze knihovna.
- ^ Může být k dispozici v knihovně regex pouze při použití s verzemi Pythonu po 3.3.
Funkce API
Rodák UTF-16 Podpěra, podpora[Poznámka 1] | Rodák UTF-8 Podpěra, podpora[Poznámka 1] | Víceřádkové shody | Částečná shoda[Poznámka 2] | |
---|---|---|---|---|
Boost.Regex | Ne | Ne | Ano | Ano |
GLib / GRegex | Ano | Ano | Ano | Ano |
RXP | Ano | Ano | Ne | Ano |
JIP Regulární výraz | Ano | Ne | Ano | ? |
Jáva | Ne | Částečný[Poznámka 3] | Ano | Ano |
.SÍŤ | Ne[Poznámka 4] | Ano | Ano | ? |
PCRE | Ano[Poznámka 5] | Ano | Ano | Ano |
Qt / QRegExp | Ano | Ne | Ne | ? |
Tcl | Ano | Ano[Poznámka 6] | Ano | ? |
TRE | Ano | Ano | Ano | ? |
RGX | Ne | Ne | Ano | ? |
wxWdigets::wxRegEx[Poznámka 7] | Ano | Ano | Ano | ? |
XRegExp | Ano | ? | Ano | ? |
- ^ A b Znamená, že formát lze použít interně bez explicitního převodu.
- ^ Částečná shoda celého regulárního výrazu. Například vzor „. * END $“ bude částečně odpovídat libovolnému řetězci, ale pouze řetězcům končícím na END plně.[1].
- ^ Podporuje standard Unicode 4.0 od roku 2003; nejnovější plány pro JDK7 zahrnují podporu Unicode 6.0 (2011).[2].
- ^ Implementace používá původní UCS-2 podpora / funkce, takže rozpozná pouze 64 tis. znaků celkem (vs. UTF-16 1 1112 064 znaků). Zástupce vývojáře společnosti Microsoft odpověděl v roce 2010 na chybovou zprávu jako „neopraví“.[3].
- ^ Od verze 8.30.
- ^ Tcl zahrnuje zařízení pro převod do az UTF-8.
- ^ wxRegEx používá jakýkoli dodaný systém POSIX nebo pokud není k dispozici a pro použití v režimu Unicode Henry Spencer knihovna.
Viz také
Reference
- ^ https://intel.github.io/hyperscan/dev-reference/getting_started.html#requirements
- ^ [4]
- ^ https://www.unicode.org/reports/tr18/
- ^ „ECMA-262, 9. vydání, červen 2018 Jazyková specifikace ECMAScript® 2018“. www.ecma-international.org. Citováno 4. srpna 2020.
externí odkazy
- Porovnání příchuti regulárních výrazů - Podrobné srovnání nejoblíbenějších příchutí regulárního výrazu
- Souhrn syntaxe Regexp
- Online testování regulárních výrazů - s podporou Java, JavaScript, .Net, PHP, Python a Ruby
- Implementace regulárních výrazů - série článků od Russa Coxe, autora RE2
- Regulární výrazové motory