在探索正则表达式(也称为正则表达式)时,有许多人似乎将正则表达式视为圣杯。看起来如此复杂的东西——一定是任何问题的答案。他们倾向于认为每个问题都可以用正则表达式解决。

另一方面,也有很多人不惜一切代价试图避免正则表达式。他们试图找到一种绕过正则表达式的方法,并仅仅为了它而接受额外的编码,即使正则表达式将是一个更紧凑的解决方案。

为什么正则表达式被认为如此有争议?关于它们的工作原理是否存在广泛的误解?或者正则表达式通常比较慢是一种普遍的看法?


当前回答

正则表达式对包括我自己在内的很多人来说都是一个严重的谜。这很有效,但就像看数学方程一样。我很高兴地告诉大家,有人终于在http://regexlib.com/上创建了各种正则表达式函数的统一位置。现在,如果微软只创建一个正则表达式类,它将自动完成许多常见的事情,如消除字母或过滤日期。

其他回答

正则表达式之于字符串,就像算术运算符之于数字,我不认为它们有争议。我认为即使是像我这样相当激进的OO活动家(倾向于选择其他对象而不是字符串)也很难拒绝它们。

问题是正则表达式潜在地非常强大,以至于可以使用它们做一些应该使用不同的东西来做的事情。

一个好的程序员应该知道在什么地方使用它们,在什么地方不使用。典型的例子是解析非常规语言(请参阅确定一种语言是否为常规语言)。

我认为如果一开始就限制自己使用真正的正则表达式(没有扩展),就不会出错。一些扩展可以使您的工作更简单一些,但是如果您发现一些很难用真正的正则表达式来表达的东西,这很可能表明正则表达式不是正确的工具。

这是一个有趣的话题。 许多regexp爱好者似乎混淆了公式的简洁性和效率。最重要的是,一个需要大量思考的regexp会给它的作者带来巨大的满足感,使它立即变得合法。

但是…当性能不是问题,并且需要快速处理文本输出时(例如在Perl中),regexp非常方便。此外,虽然性能是一个问题,但人们可能不愿意尝试使用可能有bug或效率较低的自制算法来击败regexp库。

此外,还有许多原因导致regexp受到不公平的批评

regexp效率不高,因为构建顶部的regexp并不明显 有些程序员“忘记”只编译一次要多次使用的regexp(就像Java中的静态模式) 有些程序员采用试错策略——regexp的效果更差!

我认为这是程序员中鲜为人知的技术。因此,它并没有被广泛接受。如果你有一个非技术经理来审查你的代码或工作,那么正则表达式是非常糟糕的。你会花几个小时写一个完美的正则表达式,而你会认为他/她写了这么少的代码,你会为这个模块得到很少的分数。 此外,正如在其他地方所说,读取正则表达式是非常困难的任务。

因为它们缺少普遍接受的ide中最流行的学习工具:没有Regex Wizard。甚至连自动补全都不行。你必须自己编写整个程序。