正则表达式引擎/风味对比

注意:这里是原文链接

正文如下:

风味是规范,引擎是实现。

名称说明应用
.NETSystem.Text.RegularExpressions 相关类 提供的正则引擎。基于 .Net 的语言和软件。如 C#, Visual Basic.Net, F#, Powershell, Delphi for .NET 等。
Javajava.util.regex 包提供, 在 Java 4 (JDK 1.4.x) 及更新的版本中可用。在 Java 5 (JDK 1.5.x) 和 6 (JDK 1.6.x) 中添加了一些新功能。基于 JVM 的语言和软件,如 Java, Clojure 等。
Perl内置于 Perl 的正则表达式引擎,5.6 之前的版本不支持 Unicode。Perl 编程语言。
PCRE来自开源项目 PCRE正则表达式引擎。 本文介绍的功能在 PCRE 5.x 和 6.x 中可用。REALbasic(Xojo) 语言; Delphi 组件 TPerlRegEx 和 Delphi XE 和 C++Builder XE 的单元 RegularExrpessionsRegularExpressionsCore; PHP 的 preg 函数; R 语言(perl = true); COM 对象 Microsoft VBScript Regular Expressions 5.5。
JS(JavaScript)ECMA-262 标准第 3 版定义的脚本语言(ECMAScript)中的正则表达式语法。JavaScript 编程语言;VBScript 中的 RegExp;ClojureScript 编程语言。
Python由 Python 内置模块 re 支持。Python 编程语言。
Ruby由 Ruby 内置的正则表达式引擎Ruby 编程语言。
Tcl ARE由 Henry Spencer 为 Tcl 8.2/8.4 中命令 regexp 开发,被称为高级正则表达式(Advanced Regular Expressions, ARE)Tcl 编程语言;PostgreSQL 7.4 及更新版本;wxWidgets(wxRE_ADVANCED)。
POSIX BREIEEE POSIX 标准 1003 定义的基本正则表达式(Basic Regular Expressions)Unix 上的软件工具;R 语言(perl = false, extended = false);Tcl的 基本风味(Extended Regular Expressions),wxWidgets(wxRE_BASIC)。
POSIX EREIEEE POSIX 标准 1003 定义的扩展正则表达式(Extended Regular Expressions)Unix 上的软件工具,如 awk, grep, egrep, emacs 等(Emacs 不支持 POSIX 字符类, 排序序列和等值字符); MySQL, Oracle 数据库( Oracle 支持标准外的后向引用,从 \1\9),PostgreSQL 7.3 及更早版本; PHP 的 ereg 函数,R 语言默认状态,Tcl 的扩展风味(Extended Regular Expressions),wxWidgets(wxRE_EXTENDED)。
GNU BREGNU 基本正则表达式(GNU Basic Regular Expressions), 包含 POSIX BRE 及 GNU 扩展。GNU 实现的经典 UNIX 工具,如 GNU/Linux 上的 sed 等。
GNU EREGNU 扩展正则表达式(Extended Regular Expressions), 包含 POSIX ERE 及 GNU 扩展。GNU 实现的经典 UNIX 工具,如 GNU/Linux 上的 egrep, grep 等。
XMLXML Schema 标准的附录 G定义。XML Schema。
XPath由 XQuery 1.0 和 XPath 2.0 标准中的函数与运算符章节定义。XQuery, XPath。
JGsoftJust Great Software 产品使用的正则表达式引擎PowerGREP, EditPad Pro, AceText, RegexBuddy 等。

正则表达式引擎/风味特性对比表

字符
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
\ 转义单个元字符YESYESYESYESYESYESYESYESYESYESYESYESYESYESYES
\Q...\E 转义多个元字符YESnoJava 6YESYESnononononononononono
\x00 ~ \xFF (ASCII 字符)YESYESYESYESYESYESYESYESYESnononononono
\n (换行), \r (回车), \t (制表)YESYESYESYESYESYESYESYESYESnonononoYESYES
\f (换页), \v (竖直制表)YESYESYESYESYESYESYESYESYESnononononono
\a (响铃)YESYESYESYESYESnoYESYESYESnononononono
\e (转义)YESYESYESYESYESnonoYESYESnononononono
\b (退格), \B (反斜杠, \)nonononononononoYESnononononono
\cA ~ \cZ (控制字符)YESYESYESYESYESYESnonoYESnononononono
\ca ~ \cz (控制字符)YESYESnoYESYESYESnonoYESnononononono
字符类/字符集 [abc]
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
[abc] 字符类YESYESYESYESYESYESYESYESYESYESYESYESYESYESYES
[^abc] 反义字符类YESYESYESYESYESYESYESYESYESYESYESYESYESYESYES
[a-z] 字符类范围YESYESYESYESYESYESYESYESYESYESYESYESYESYESYES
[\d-z] 中的 - 视为字面量YESYESYESYESYESnononononononononono
[a-\d] 中的 - 视为字面量YESnononoYESnononononononononono
\ 转义单个字符类元字符YESYESYESYESYESYESYESYESYESnonononoYESYES
\Q...\E 转义多个字符类元字符YESnoJava 6YESYESnononononononononono
\d 代表数字YESYESasciiYESasciiasciioptionasciiYESnonononoYESYES
\w 代表单词字符YESYESasciiYESasciiasciioptionasciiYESnonoYESYESYESYES
\s 代表空白字符YESYESasciiYESasciiYESoptionasciiYESnonoYESYESasciiascii
\D, \W and \S 代表反义字符类YESYESYESYESYESYESYESYESYESnonoYESYESYESYES
[\b] 匹配反斜杠(\)YESYESYESYESYESYESYESYESYESnononononono
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
. 匹配换行符(\n)外所有字符YESYESYESYESYESYESYESYESYESYESYESYESYESYESYES
锚点
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
^ 字符串/行开始YESYESYESYESYESYESYESYESYESYESYESYESYESnoYES
$ 字符串/行结束YESYESYESYESYESYESYESYESYESYESYESYESYESnoYES
\A 字符串开始YESYESYESYESYESnoYESYESYESnononononono
\Z 字符串结束,最后一个\n前YESYESYESYESYESnonoYESYESnononononono
\z 字符串结束YESYESYESYESYESno\ZYESnonononononono
\` 字符串开始nononononononononononoYESYESnono
\' 字符串结束nononononononononononoYESYESnono
单词边界
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
\b 单词的开始或结束处YESYESYESYESasciiasciioptionasciinononoYESYESnono
\B 不是单词的开始处或结束处YESYESYESYESasciiasciioptionasciinononoYESYESnono
\y 单词的开始或结束处YESnononononononoYESnononononono
\Y 不是单词的开始处或结束处YESnononononononoYESnononononono
\m 单词的开始处YESnononononononoYESnononononono
\M 单词的结束处YESnononononononoYESnononononono
\< 单词的开始处nononononononononononoYESYESnono
\> 单词的结束处nononononononononononoYESYESnono
分支条件
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
| 分支条件YESYESYESYESYESYESYESYESYESnoYES\|YESYESYES
量词
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
? 0 ~ 1 次YESYESYESYESYESYESYESYESYESnoYES\?YESYESYES
* 0 次或更多次YESYESYESYESYESYESYESYESYESYESYESYESYESYESYES
+ 1 次或更多次YESYESYESYESYESYESYESYESYESnoYES\+YESYESYES
{n} n 次YESYESYESYESYESYESYESYESYES\{n\}YES\{n\}YESYESYES
{n,m} n ~ m 次YESYESYESYESYESYESYESYESYES\{n,m\}YES\{n,m\}YESYESYES
{n,} n 次或更多次YESYESYESYESYESYESYESYESYES\{n,\}YES\{n,\}YESYESYES
量词后加 ? 转为懒惰模式YESYESYESYESYESYESYESYESYESnononononoYES
分组与后向引用
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
(regex) 编号捕获组YESYESYESYESYESYESYESYESYES\( \)YES\( \)YESYESYES
(?:regex) 非捕获组YESYESYESYESYESYESYESYESYESnononononono
\1 ~ \9 后向引用YESYESYESYESYESYESYESYESYESYESnoYESYESnoYES
\10 ~ \99 后向引用YESYESYESYESYESYESYESYESYESnon/anonon/aYES
前向引用 \1 through \9YESYESYESYESYESnonoYESnonon/anonon/ano
嵌套引用 \1 ~ \9YESYESYESYESYESYESnoYESnonon/anonon/ano
后向引用不存在的组报错YESYESYESYESYESnoYESnoYESYESn/aYESYESn/aYES
后向引用匹配失败的组失败YESYESYESYESYESnoYESYESYESYESn/aYESYESn/aYES
修饰器
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
(?i) 忽略大小写YESYESYESYESYES/i onlyYESYESYESnononononoflag
(?s) 点(.)可匹配\nYESYESYESYESYESnoYES(?m)nonononononoflag
(?m) 行开始/结束可匹配 ^ / $YESYESYESYESYES/m onlyYESalways onnonononononoflag
(?x) 忽略空白模式YESYESYESYESYESnoYESYESYESnononononoflag
(?n) 显式匹配YESYESnonononononononononononono
(?-ismxn) 关闭模式修饰器YESYESYESYESYESnonoYESnonononononono
(?ismxn:group) 模式修饰器仅应用于本组YESYESYESYESYESnonoYESnonononononono
原子组与占位量词(possessive quantifiers)
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
(?>regex) 原子组YESYESYESYESYESnonoYESnonononononono
?+, *+, ++, {m,n}+ 占位量词YESnoYESnoYESnononononononononono
断言
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
(?=regex) 正预测先行断言YESYESYESYESYESYESYESYESYESnononononono
(?!regex) 负预测先行断言YESYESYESYESYESYESYESYESYESnononononono
(?<=text) 正回顾后发断言full regexfull regexfinite lengthfixed lengthfixed + alternationnofixed lengthnononononononono
(?<!text) 负回顾后发断言full regexfull regexfinite lengthfixed lengthfixed + alternationnofixed lengthnononononononono
从上个匹配继续
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
\G 匹配尝试的开始YESYESYESYESYESnonoYESnonononononono
条件
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
(?(?=regex)then|else) 使用任意断言YESYESnoYESYESnononononononononono
(?(regex)then|else)noYESnonononononononononononono
(?(1)then|else)YESYESnoYESYESnoYESnononononononono
(?(group)then|else)YESYESnonoYESnoYESnononononononono
注释
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
(?#comment)YESYESnoYESYESnoYESYESYESnononononono
忽略空白
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
支持忽略空白语法YESYESYESYESYESnoYESYESYESnononononoYES
字符类作为整体YESYESnoYESYESn/aYESYESYESn/an/an/an/an/aYES
# 开启注释YESYESYESYESYESn/aYESYESYESn/an/an/an/an/ano
Unicode 字符
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
\X Unicode 字素YESnonoYESoptionnononononononononono
\u0000 ~ \uFFFF (Unicode 字符)YESYESYESnonoYESu"string"noYESnononononono
\x{0} ~ \x{FFFF} (Unicode 字符)YESnonoYESoptionnononononononononono
Unicode 属性, 脚本与区块
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
\pL ~ \pC (Unicode 属性)YESnoYESYESoptionnononononononononono
\p{L} ~ \p{C} (Unicode 属性)YESYESYESYESoptionnonononononononoYESYES
\p{Lu} ~ \p{Cn} (Unicode 属性)YESYESYESYESoptionnonononononononoYESYES
\p{L&}, \p{Letter&} 等同于 [\p{Lu}\p{Ll}\p{Lt}] Unicode 属性YESnonoYESoptionnononononononononono
\p{IsL} ~ \p{IsC} (Unicode 属性)YESnoYESYESnonononononononononono
\p{IsLu} ~ \p{IsCn} (Unicode 属性)YESnoYESYESnonononononononononono
\p{Letter} ~ \p{Other} (Unicode 属性)YESnonoYESnonononononononononono
\p{Lowercase_Letter} ~ \p{Not_Assigned} (Unicode 属性)YESnonoYESnonononononononononono
\p{IsLetter} ~ \p{IsOther} (Unicode 属性)YESnonoYESnonononononononononono
\p{IsLowercase_Letter} ~ \p{IsNot_Assigned} (Unicode 属性)YESnonoYESnonononononononononono
\p{Arabic} ~ \p{Yi} (Unicode 脚本)YESnonoYESoptionnononononononononono
\p{IsArabic} ~ \p{IsYi} (Unicode 脚本)YESnonoYESnonononononononononono
\p{BasicLatin} ~ \p{Specials} (Unicode 区块)YESnonoYESnonononononononononono
\p{InBasicLatin} ~ \p{InSpecials} (Unicode 区块)YESnoYESYESnonononononononononono
\p{IsBasicLatin} ~ \p{IsSpecials} (Unicode 区块)YESYESnoYESnononononononononoYESYES
上方 {} 中的内容忽略大小写YESnonoYESnonononononononononono
上方语法中长名称允许空格,边字符,下划线 (如 BasicLatin 可写为 Basic-LatinBasic_LatinBasic Latin)YESnoJava 5YESnonononononononononono
\P 上方所有 \p 的反义YESYESYESYESoptionnonononononononoYESYES
\p{^...} 上方所有 \p{...} 的反义YESnonoYESoptionnononononononononono
命名捕获与后向引用
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
(?<name>regex) .Net 风格的命名捕获分组YESYESnonononononononononononono
(?'name'regex) .Net 风格的命名捕获分组YESYESnonononononononononononono
\k<name> .Net 风格的命名后向引用YESYESnonononononononononononono
\k'name' .Net 风格的命名后向引用YESYESnonononononononononononono
(?P<name>regex) Python 风格的命名捕获分组YESnononoYESnoYESnononononononono
(?P=name) Python 风格的命名后向引用YESnononoYESnoYESnononononononono
多个捕获组同名YESYESn/an/anon/anon/an/an/an/an/an/an/an/a
XML 字符类
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
\i, \I, \c, \C XML 名称字符类nononononononononononononoYESYES
[abc-[abc]] 字符类差集YES2.0nononononononononononoYESYES
POSIX 方括号表达式
特性JGsoft.NETJavaPerlPCREJSPythonRubyTcl AREPOSIX BREPOSIX EREGNU BREGNU EREXMLXPath
[:alpha:] POSIX 字符类YESnonoYESasciinonoYESYESYESYESYESYESnono
\p{Alpha} POSIX 字符类YESnoasciinononononononononononono
\p{IsAlpha} POSIX 字符类YESnonoYESnonononononononononono
[.span-ll.] POSIX 排序序列nonononononononoYESYESYESYESYESnono
[=x=] POSIX 等值字符nonononononononoYESYESYESYESYESnono
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值