正则表达式是不是有多个版本。

最权威的是不是perl引擎版本的? vim编辑器中的正则就是perl正则和只有一点点差别。
网上有正则 30分钟入门的教程,那什么版本?

正则表达有2大引擎:
NFA引擎,DFA引擎。

简而言之:
DFA最快,且必然遵循“最左最长”原则,但不支持反向引用和匹配量词。
由于以上特性,所以DFA不需要任何优化,对于同一个正则应用,任何正确的表达式效率都是一样的。
NFA的特性是“先手为王”,支持反向引用和匹配量词等高级特性,相对的,面对同一个正则应用,好的表达式和不好的表达式效率可以是千差万别,虽然他们都可能是正确的。

需要注意的是:DFA是“标准的正则引擎"。
而NFA由于支持反向引用和环视等特性,所以是“不标准的正则表达引擎"。

但是大多数语言的正则表达都是NFA引擎,这是因为NFA的功能非常强大。
perl的正则是典型的NFA引擎,因此也是最普及的正则表达的一个足够好的代表。
javascript虽然也是NFA引擎,但不支持向左环视。
.NET的NFA引擎则是最优秀的,因为它允许在向左环视中套用“任意长度的正则表达”,而perl等语言只能使用定长式。
但是反过来.NET的这个特性对于不够牛的程序员来说,往往容易变成一个恐怖的程序漏洞。

所以如果要学正则表达,就从perl或者PHP开始最好。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-15
只有一个版本,不过有些语法不同的语言支持不是那么全。
比如js就不支持:(?<=exp)

sql-正则表达式
1. MySQL的正则表达式支持在版本3.23.4之后,通常默认不区分大小写。如需区分,可使用BINARY关键字,如:SELECT * FROM table WHERE post_name REGEXP BINARY 'Hello .000';2. LIKE操作符的通配符非常实用:百分号('%')代表任意字符,下划线('_')则代表单个字符。例如:SELECT * FROM table WHERE...

JavaScript中的正则有几个不同于其他语言的地方
这个讲起来比较简单,就是:在Perl和其他一些linux命令的正则表达式中,字符类[]中如果包含了一个紧跟着左方括号的右方括号[]],则这个右方括号会被当作一个普通字符,即只能匹配”]”,而在JavaScript中,这种正则会被识别成一个空字符类后跟一个右方括号,空字符类什么都不匹配.[^]]也类似:在JavaScript中,它匹配的...

在UltraEdit中使用正则表达式
在UltraEdit配置中的正则表达式引擎中挑上使用UltraEdit风格,13版本使用Unix风格不能使用正则表达式分组功能 从Ultraedit8.0一直使用到现在,感觉这个东东确实不错。现将一些基本的经验总结如下,与大家共享;欢迎有兴趣的朋友前来补充。 Tip 0: 没有注册码,如何有效使用Ultraedit呢? 很多人立即想到使用crack版,可实际追究起来...

Linux正则表达式
1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本。2.egrep : 扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本。3.fgrep : 快速grep,这个版本匹配固定字符串而非正则表达式。并且是唯一可以并行匹配多个字符串的版本。如下简单的介绍grep命令:语法格式:grep [options...

如何使用正则表达式
在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包。 可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式。正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性。在Unix世界里,正则表达式几乎没有什么限制,...

js正则匹配数字或者"."
根据以上分析,可以使用“或”连接三种规则,合并生成一个正则表达式:\/\/ 不限长度版本var rVersion = \/^\\d+$|^\\d+\\.\\d+$|^\\d+(\\.\\d+){1,2}$\/;\/\/ 限制长度(每一位版本号应该是一位数)\/\/ var rVersion = \/^\\d$|^\\d\\.\\d$|^\\d(\\.\\d){1,2}$\/;现在来验证下:var case...

python的正则表达式
+ 匹配1次或者多次 re是正则表达式的工具包,工具包出错的话在anaconda的命令行输入"pip install re"安装,其他的工具包也是如此.re.compile()中的r示意\\不是转义字符,也就是保持后面字符串原样,findall返回一个列表.下面还有一个版本的程序略有不同.compile的另一个参数re.IGONORECASE(忽略大小写),...

寻js正则表达式
匹配空白行的正则表达式:\\n\\s*\\r评注:可以用来删除空白行 匹配HTML标记的正则表达式:<(\\S*?)[^>]*>.*?|<.*? \/>评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力 匹配首尾空白字符的正则表达式:^\\s*|\\s*$评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换...

易语言 正则表达式 如何取里面的数字 19.90 29.0 129.90
.版本 2 .支持库 RegEx .支持库 spec .局部变量 正则, 正则表达式 .局部变量 结果, 搜索结果, , "0".局部变量 N, 整数型 ' 常量1=["19.90","29.00","35.00","19.89","39.00","39.80","129.90","36.00","29.80","27.80","49.00","29.00"]正则.创建 (“(\\d+.\\...

ECMAScript版本
至今为止已有五个ECMA-262版本,分别为:1997年发布的首版v1,1998年发布的v2进行了格式修正,与ISO\/IEC16262国际标准一致,1999年发布的v3增加了强大的正则表达式、更好的文字链处理、新的控制指令、异常处理等,2004年发布的v4可能在类的定义、命名空间等方面更明确,2009年发布的v5。ECMA-262定义了...

相似回答