跨语言的RegEx标准

时间:2012-10-05 04:46:07

标签: regex

我问这个问题,因为我注意到不同语言之间RegEx的语法略有不同。我想知道是否有一个RegEx标准在某处维护?如果是这样,我在哪里可以找到这份文件。另外,如果我在.NET中创建一个RegEx表达式,那么相同的表达式是否保证100%兼容并且可以与其他语言一起使用,例如Perl或Javascript或Java?最后,在使用RegEx时是否有任何“最佳实践”,这有助于使其在其他平台语言中更易于维护?

3 个答案:

答案 0 :(得分:12)

最古老的标准化正则表达式之一是POSIX BRE(基本正则表达式)和ERE(扩展正则表达式),记录在Regular Expressions下。

其他语言可能会定义自己的标准。例如,C ++ 2011具有第28节中定义的正则表达式库(约46页标准)。 Perl定义了它的正则表达式。其他语言借鉴这些来源和其他语言。 Lex和Flex使用他们自己的正则表达式。 Sed在正则表达式上使用自己的变体。 Java,JavaScript和...定义了自己的版本,有时使用PCRE(Perl兼容的正则表达式)作为其设计的基础。一些细节受到使用正则表达式的语言提供的功能的影响。

Jeff Friedl的书Mastering Regular Expressions涵盖了很多不同的正则表达式,确定了什么是常见的,什么是不同的。

答案 1 :(得分:0)

没有这样的标准。当然有PCRE,POSIX BRE,POSIX ERE,......

但事实上,任何语言都会有“小”差异。对于大多数风格,你可以转发非常基本的东西,例如任何字符的.或量词+*?,字符类也很常见,但它已经从预定义的类开始,如\w,是否支持?或基于ASCII或Unicode?

这里的好帮手是flavor comparison on regular-expressions.info Jan Goyvaerts

答案 2 :(得分:0)

最佳实践

避免使用positive-negative lookbehinds,在某些情况下lookaheads

相关问题