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

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

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


当前回答

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

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

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

其他回答

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

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

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

“正则表达式:现在你有两个问题”是Jeff Atwood关于这个问题的一篇很棒的文章。基本上,正则表达式是“难”的!他们会制造新的问题。然而,它们是有效的。

在某些情况下,我认为你必须使用它们。例如构建lexer。

在我看来,这是会写regexp的人和不会(或几乎不会)写regexp的人的观点。 我个人认为这是一个很好的想法,例如,有效的表单输入,它在javascript警告用户,或在服务器端语言。

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

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