Comparison of regular expression engines
Lua error in package.lua at line 80: module 'strict' not found.
This is a comparison of regular expression engines.
Contents
Libraries
<templatestyles src="Reflist/styles.css" />
Cite error: Invalid <references>
tag; parameter "group" is allowed only.
<references />
, or <references group="..." />
Languages
Language | Official website | Software license | Remarks |
---|---|---|---|
.NET | MSDN | MIT License[Note 6]:{{{3}}}[Note 7]:{{{3}}} | |
POSIX C (C) | libc/regex from BSD | BSD | According to regex(3), available from at least 4.4BSD (if not earlier) |
C++11 (C++) | C++ standards website | ? | Since ISO14822:2011(e) |
D | D | Boost Software License[Note 8]:{{{3}}} | |
Go | Golang.org | BSD-style | |
Haskell | Haskell.org | BSD3 | Omitted in the language report, and in GHC's Hierarchical Libraries |
Java | Java | GNU General Public License | REs are written as strings in source code: all backslashes must be doubled, harming readability. |
JavaScript (ECMAScript) | ECMA-262 | BSD3 | Limited but REs are first-class citizens of the language with a specific /.../mod syntax. |
Julia | JuliaLang.org | MIT License | REs are part of the language core library using PCRE built-in and an optional wrapper for (C code) ICU is available. |
Lua | Lua.org | MIT License | Uses simplified, limited dialect; can be bound to more powerful library, like PCRE or an alternative parser like LPeg. |
Mathematica | Wolfram | Proprietary | |
Free Pascal (Object Pascal) | www.freepascal.org | LGPL with static linking exception | Free Pascal 2.6+ ships with TRegExpr from Sorokin and two other regular expression libraries; See wiki.lazarus.freepascal.org/Regexpr. |
Cocoa (Objective-C) | Apple | Proprietary | As of 2012[update], available on only iOS 4+ and OS X 10.7+ |
OCaml | Caml | LGPL | |
Perl | Perl.com | Artistic License, or GNU General Public License | Full, central part of the language |
PHP | PHP.net | PHP License | Has two implementations, with PCRE being the more efficient in speed, functions |
Python | python.org | Python Software Foundation License | Python has two major implementations, the built in re and the regex library. |
Ruby | ruby-doc.org | GNU Library General Public License | Ruby 1.8 and 1.9 use different engines; 1.9 integrates Oniguruma. |
SAP ABAP | SAP.com | Proprietary | |
Tcl | tcl.tk | Tcl/Tk License (BSD-style) |
Tcl library doubles as a regular expression library. |
ActionScript 3 | ActionScript Technology Center | Free | |
Wolfram Language | Wolfram Research | Proprietary; usable for free on a limited scale on the Wolfram Development platform. |
<templatestyles src="Reflist/styles.css" />
Cite error: Invalid <references>
tag; parameter "group" is allowed only.
<references />
, or <references group="..." />
Language features
NOTE: An application using a library for regular expression support does not necessarily offer the full set of features of the library, e.g. GNU grep which uses PCRE does not offer lookahead support, though PCRE does.
Part 1
"+" quantifier | Negated character classes | Non-greedy quantifiers[Note 9]:{{{3}}} | Shy groups[Note 10]:{{{3}}} | Recursion | Look-ahead | Look-behind | Backreferences[Note 11]:{{{3}}} | >9 indexable captures | |
---|---|---|---|---|---|---|---|---|---|
Boost.Regex | Yes | Yes | Yes | Yes | Yes[Note 12]:{{{3}}} | Yes | Yes | Yes | Yes |
Boost.Xpressive | Yes | Yes | Yes | Yes | Yes[Note 13]:{{{3}}} | Yes | Yes | Yes | Yes |
CL-PPCRE | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
EmEditor | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | No |
FREJ | No[Note 14]:{{{3}}} | No | Some[Note 14]:{{{3}}} | Yes | No | No | No | Yes | Yes |
GLib/GRegex | Yes | ? | Yes | ? | No | ? | ? | ? | ? |
GNU grep | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | ? |
Haskell | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
ICU Regex | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
Java | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
JavaScript (ECMAScript) | Yes | Yes | Yes | Yes | No | Yes | No | Yes | Yes |
JGsoft | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
Lua | Yes | Yes | Some[Note 15]:{{{3}}} | No | No | No | No | Yes | No |
.NET | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
OCaml | Yes | Yes | No | No | No | No | No | Yes | No |
OmniOutliner 3.6.2 | Yes | Yes | Yes | No | No | No | No | ? | ? |
PCRE | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Perl | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
PHP | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Python | Yes | Yes | Yes | Yes | Yes[Note 16]:{{{3}}} | Yes | Yes | Yes | Yes |
Qt/QRegExp | Yes | Yes | Yes | Yes | No | Yes | No | Yes | Yes |
R[Note 17]:{{{3}}} | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
RE2 | Yes | Yes | Yes | Yes | No | No | No | No | Yes |
Ruby | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
TRE | Yes | Yes | Yes | Yes | No | No | No | Yes | No |
Vim 7.4b.000 (2013-07-28) [±] | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | No |
RGX | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
Tcl | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
TRegExpr | Yes | ? | Yes | ? | ? | ? | ? | ? | ? |
XRegExp | Yes | Yes | Yes | Yes | No | Yes | No | Yes | Yes |
<templatestyles src="Reflist/styles.css" />
Cite error: Invalid <references>
tag; parameter "group" is allowed only.
<references />
, or <references group="..." />
Part 2
Directives[Note 18]:{{{3}}} | Conditionals | Atomic groups[Note 19]:{{{3}}} | Named capture[Note 20]:{{{3}}} | Comments | Embedded code | Unicode property support [1] | Balancing groups[Note 21]:{{{3}}} | Variable-length look-behinds[Note 22]:{{{3}}} | |
---|---|---|---|---|---|---|---|---|---|
Boost.Regex | Yes | Yes | Yes | Yes | Yes | No | Some[Note 23]:{{{3}}} | No | No |
Boost.Xpressive | Yes | No | Yes | Yes | Yes | No | No | No | No |
CL-PPCRE | Yes | Yes | Yes | Yes | Yes | Yes | Some[Note 23]:{{{3}}} | No | No |
EmEditor | Yes | Yes | ? | ? | Yes | No | ? | No | No |
FREJ | No | No | Yes | Yes | Yes | No | ? | No | No |
GLib/GRegex | Yes | Yes | Yes | Yes | Yes | No | Some[Note 23]:{{{3}}} | No | No |
GNU grep | Yes | Yes | ? | Yes | Yes | No | No | No | No |
Haskell | ? | ? | ? | ? | ? | No | No | No | No |
ICU Regex | Yes | No | Yes | No | Yes | No | Yes | No | No |
Java | Yes | No | Yes | Yes[Note 24]:{{{3}}} | Yes | No | Some[Note 23]:{{{3}}} | No | No |
JavaScript (ECMAScript) | No | No | No | No | No | No | No | No | No |
JGsoft | Yes | Yes | Yes | Yes | Yes | No | Some[Note 23]:{{{3}}} | No | Yes |
Lua | No | No | No | No | No | No | No | No | No |
.NET | Yes | Yes | Yes | Yes | Yes | No | Some[Note 23]:{{{3}}} | Yes | Yes |
OCaml | No | No | No | No | No | No | No | No | No |
OmniOutliner 3.6.2 | ? | ? | ? | ? | No | No | ? | No | No |
PCRE | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No |
Perl | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No |
PHP | Yes | Yes | Yes | Yes | Yes | No | No | No | No |
Python | Yes | Yes | Yes[Note 25]:{{{3}}} | Yes | Yes | No | Yes[Note 26]:{{{3}}} | No | Yes[Note 25]:{{{3}}} |
Qt/QRegExp | No | No | No | No | No | No | No | No | No |
RE2 | Yes | No | ? | Yes | No | No | Some[Note 23]:{{{3}}} | No | No |
Ruby | Yes | No | Yes | Yes | Yes | Yes | Some[Note 23]:{{{3}}} | No | No |
Tcl | Yes | No | Yes | No | Yes | No | Yes | No | No |
TRE | Yes | No | No | No | Yes | No | ? | No | No |
Vim | Yes | No | Yes | No | No | No | No | No | Yes |
RGX | Yes | Yes | Yes | Yes | Yes | No | Yes | No | No |
XRegExp | Leading only | No | No | Yes | Yes | No | Yes | No | No |
<templatestyles src="Reflist/styles.css" />
Cite error: Invalid <references>
tag; parameter "group" is allowed only.
<references />
, or <references group="..." />
API features
Native UTF-16 support[Note 27]:{{{3}}} | Native UTF-8 support[Note 27]:{{{3}}} | Multi-line matching | Partial match[Note 28]:{{{3}}} | |
---|---|---|---|---|
Boost.Regex | No | No | Yes | Yes |
GLib/GRegex | Yes | Yes | Yes | ? |
ICU Regex | Yes | No | Yes | ? |
Java | No | Partial[Note 29]:{{{3}}} | Yes | Yes |
.NET | No[Note 30]:{{{3}}} | Yes | Yes | ? |
PCRE | Yes[Note 31]:{{{3}}} | Yes | Yes | Yes |
Qt/QRegExp | Yes | No | No | ? |
Tcl | Yes | Yes[Note 32]:{{{3}}} | Yes | ? |
TRE | No | ? | Yes | ? |
RGX | No | No | Yes | ? |
wxWdigets::wxRegEx[Note 33]:{{{3}}} | Yes | Yes | Yes | ? |
XRegExp | Yes | ? | Yes | ? |
<templatestyles src="Reflist/styles.css" />
Cite error: Invalid <references>
tag; parameter "group" is allowed only.
<references />
, or <references group="..." />
See also
References
<templatestyles src="Reflist/styles.css" />
Cite error: Invalid <references>
tag; parameter "group" is allowed only.
<references />
, or <references group="..." />
External links
- Regular Expression Flavor Comparison — Detailed comparison of the most popular regular expression flavors
- Regexp Syntax Summary
- Online Regular Expression Testing - with support for Java, JavaScript, .Net, PHP, Python and Ruby
Cite error: <ref>
tags exist for a group named "Note", but no corresponding <references group="Note"/>
tag was found, or a closing </ref>
is missing