似乎大多数现代语言和工具都允许使用扩展正则表达式,并且ERE看起来比使用所有这些反斜杠的BRE要干净得多。当使用ERE而不是BRE时,在兼容性或可维护性方面有什么主要缺点吗?
发布于 2010-04-18 15:57:20
我不认为"BRE和ERE“是一个非常有用的区别。仍然有许多基于ERE的工具,如awk和gnu grep,以及MySQL和Oracle等数据库中的正则表达式支持,但BRE实际上是一个脚注。
此外,就特性而言,大多数现代编程语言中内置的regex风格远远超出了ERE。即使是功能最弱的JavaScript,也支持非捕获组、不情愿的量词和lookaheads。将正则表达式的风格归类为"ERE和ECMA+“可能会更有帮助,但还有更多的原因。
如果您在Tcl中编程,您将使用\y和\m来匹配单词边界;在JavaScript中,您将学会喜欢[\s\S],因为没有点匹配-换行符模式;在Visual Studio中,您将使用@和#而不是*?和+?来进行最小匹配。而且,尽管Java具有完全现代的regex风格,但它没有regex字面量和原始/字面量/逐字字符串表示法,因此您无论如何都看不到所有的反斜杠。
在实践中,这并不是你必须做出的选择。一旦确定了要使用的工具,就可以使用它所需的任何regex风格。
参考:Flavor comparison chart
发布于 2010-04-18 07:48:23
兼容性有明显的缺点,但这显然不会影响您编写的新正则表达式。我总是使用扩展的正则表达式。事实上,这是目前大多数regex库的默认设置,所以请顺其自然。
发布于 2010-04-18 10:20:52
这取决于您的环境和受众。
BRE正变得越来越罕见,我认为在这一点上,更多的工具可能比BRE支持更多。甚至grep (GNU变体)现在也是默认的。
大多数所谓的“BRE”实际上并不是BRE。如果你有这些函数中的任何一个作为元字符:| + ?,那么你的BRE实际上是有BRE转义的。
我认为BRE是一个例外,除非您的环境中有需要,否则应该避免使用它。
https://stackoverflow.com/questions/2660521
复制相似问题