我可以一直安全地使用扩展正则表达式而不是基本表达式吗?

时间:2010-04-17 23:42:27

标签: regex

看起来大多数现代语言和工具都允许使用扩展的正则表达式,并且ERE看起来比BRE更清晰,包含所有这些反斜杠。使用ERE而不是BRE时,兼容性或可维护性是否存在任何重大缺陷?

3 个答案:

答案 0 :(得分:1)

复杂性有明显的缺点,但这显然不会影响你写的新正则表达式。我总是使用扩展的正则表达式。事实上,这是目前大多数正则表达式库的默认值,所以请按照流程进行操作。

答案 1 :(得分:1)

取决于您的环境和受众。

BRE越来越少了,我认为此时更多的工具可能支持ERE而不是BRE。即使grep(GNU变体)现在也是ERE默认值。

大多数所谓的'BRE'实际上并不是BRE。如果您将这些功能中的任何一个用作元字符:| + ?,那么您的BRE实际上是ERE并且BRE会转义。

我认为BRE是例外情况,除非您的环境中存在需要它的内容,否则应该避免使用它。

答案 2 :(得分:0)

我不认为“BRE与ERE”这些日子是非常有用的区别。仍有许多基于ERE的工具,如awk和gnu grep,以及MySQL和Oracle等数据库中的正则表达式支持,但BRE实际上是一个脚注。

此外,大多数现代编程语言中内置的正则表达式风格在功能方面远远超出了ERE。即便是JavaScript,也是最不强大的,支持非捕获组,不情愿的量词和前瞻。将正则表达式的风格分类为“ERE vs. ECMA +”可能更有帮助,但除此之外还有很多其他内容。

如果您使用Tcl进行编程,则使用\y\m来匹配字边界;在JavaScript中你学会爱[\s\S],因为没有点匹配换行模式;在Visual Studio中,您使用@#代替*?+?进行最小匹配。而且,虽然Java具有完全现代的正则表达式风格,但它没有正则表达式文字,也没有原始/文字/逐字符号表示法,所以无论如何你都不能看着所有的反斜杠。

在实践中,这绝不是你必须做出的选择。一旦你决定使用哪种工具,就可以使用它所需要的任何正则表达式。


参考:Flavor comparison chart