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

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

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


当前回答

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

其他回答

我发现正则表达式有时是无价的。当我需要做一些“模糊”搜索时,可能会替换。当数据可能变化,具有一定的随机性时。 然而,当我需要做一个简单的搜索和替换,或检查字符串,我不使用正则表达式。尽管我知道很多人这样做,但他们什么都用它。这就是争议所在。

如果你想在墙上钉钉子,不要用锤子。是的,它会起作用,但等你拿到锤子,我可以在墙上钉20个钉子。

正则表达式应该用于它们设计的目的,而不是别的。

我不认为他们有那么大的争议。

我也认为你已经回答了你自己的问题,因为你指出到处使用它们(不是所有的语言都是常规语言2)或根本避免使用它们是多么愚蠢。作为程序员,您必须做出一个明智的决定,即正则表达式何时有助于代码,何时有害于代码。当面临这样的决定时,要记住两件重要的事情:可维护性(这意味着可读性)和可扩展性。

对于那些特别讨厌它们的人,我猜他们从来没有学会正确使用它们。我认为大多数人只要花上几个小时学习一些不错的教程,就能很快掌握并熟练使用这些语言。以下是我的建议:

http://docs.python.org/howto/regex

尽管该页讨论的是Python上下文中的正则表达式,但我发现这些信息在其他地方也非常适用。有一些东西是python特有的,但我相信它们被清楚地指出来了,而且很容易记住。

你可能会问为什么goto会有争议。

基本上,当你拥有这么多“显而易见”的权力时,人们倾向于在它们不是最佳选择的情况下滥用它们。例如,要求用正则表达式解析csv或XML或HTML的人的数量让我感到震惊。这不是做这项工作的合适工具。但是一些用户还是坚持使用正则表达式。

就我个人而言,我试图找到一个中庸之道——在正则表达式擅长的地方使用它们,在它们不是最优的时候避免使用它们。

请注意,正则表达式仍然可以用于解析csv、XML、HTML等。但通常不是在一个正则表达式中。

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

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

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

我不认为人们反对正则表达式是因为它们很慢,而是因为它们很难读和写,而且很难正确。虽然在某些情况下,正则表达式为问题提供了一种有效的、紧凑的解决方案,但有时它们会被硬塞到使用易于阅读、可维护的代码部分更好的情况中。