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

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

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


当前回答

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

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

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

其他回答

虽然我认为正则表达式是一个必要的工具,但关于它们最烦人的事情是有不同的实现。语法、修饰语,尤其是“贪婪”的细微差异会让事情变得非常混乱,需要反复试验,有时还会产生令人困惑的错误。

人们倾向于认为正则表达式很难;但那是因为他们用错了。在没有任何注释、缩进或命名捕获的情况下编写复杂的一行程序。(你不会把复杂的SQL表达式塞进一行,没有注释、缩进或别名,对吧?)所以,是的,对很多人来说,它们没有意义。

然而,如果你的工作与文本解析有关(基本上所有的web应用程序都是如此),而你不懂正则表达式,那你的工作就糟透了,你在浪费自己和雇主的时间。有很好的资源可以教你关于他们的一切,你需要知道的,甚至更多。

几乎我认识的每个经常使用正则表达式的人(双关语)都有unix背景,他们使用的工具将正则视为一级编程结构,比如grep、sed、awk和Perl。由于使用正则表达式几乎没有语法开销,因此它们的效率会大大提高。

相比之下,使用正则作为外部库的语言的程序员往往不会考虑正则表达式可以带来什么。程序员的“时间成本”是如此之高,以至于a) REs从未出现在他们的培训中,b)他们不会从REs的角度“思考”,而是更喜欢使用更熟悉的模式。

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

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

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

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

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