在探索正则表达式(也称为正则表达式)时,有许多人似乎将正则表达式视为圣杯。看起来如此复杂的东西——一定是任何问题的答案。他们倾向于认为每个问题都可以用正则表达式解决。
另一方面,也有很多人不惜一切代价试图避免正则表达式。他们试图找到一种绕过正则表达式的方法,并仅仅为了它而接受额外的编码,即使正则表达式将是一个更紧凑的解决方案。
为什么正则表达式被认为如此有争议?关于它们的工作原理是否存在广泛的误解?或者正则表达式通常比较慢是一种普遍的看法?
在探索正则表达式(也称为正则表达式)时,有许多人似乎将正则表达式视为圣杯。看起来如此复杂的东西——一定是任何问题的答案。他们倾向于认为每个问题都可以用正则表达式解决。
另一方面,也有很多人不惜一切代价试图避免正则表达式。他们试图找到一种绕过正则表达式的方法,并仅仅为了它而接受额外的编码,即使正则表达式将是一个更紧凑的解决方案。
为什么正则表达式被认为如此有争议?关于它们的工作原理是否存在广泛的误解?或者正则表达式通常比较慢是一种普遍的看法?
当前回答
我认为这是程序员中鲜为人知的技术。因此,它并没有被广泛接受。如果你有一个非技术经理来审查你的代码或工作,那么正则表达式是非常糟糕的。你会花几个小时写一个完美的正则表达式,而你会认为他/她写了这么少的代码,你会为这个模块得到很少的分数。 此外,正如在其他地方所说,读取正则表达式是非常困难的任务。
其他回答
regex是一个很棒的工具,但是人们认为“嘿,多么棒的工具,我要用它来做X!”而X是另一个工具更适合做的事情(通常是解析器)。这是标准的使用锤子,你需要一个螺丝刀的问题。
几乎我认识的每个经常使用正则表达式的人(双关语)都有unix背景,他们使用的工具将正则视为一级编程结构,比如grep、sed、awk和Perl。由于使用正则表达式几乎没有语法开销,因此它们的效率会大大提高。
相比之下,使用正则作为外部库的语言的程序员往往不会考虑正则表达式可以带来什么。程序员的“时间成本”是如此之高,以至于a) REs从未出现在他们的培训中,b)他们不会从REs的角度“思考”,而是更喜欢使用更熟悉的模式。
我不认为他们有那么大的争议。
我也认为你已经回答了你自己的问题,因为你指出到处使用它们(不是所有的语言都是常规语言2)或根本避免使用它们是多么愚蠢。作为程序员,您必须做出一个明智的决定,即正则表达式何时有助于代码,何时有害于代码。当面临这样的决定时,要记住两件重要的事情:可维护性(这意味着可读性)和可扩展性。
对于那些特别讨厌它们的人,我猜他们从来没有学会正确使用它们。我认为大多数人只要花上几个小时学习一些不错的教程,就能很快掌握并熟练使用这些语言。以下是我的建议:
http://docs.python.org/howto/regex
尽管该页讨论的是Python上下文中的正则表达式,但我发现这些信息在其他地方也非常适用。有一些东西是python特有的,但我相信它们被清楚地指出来了,而且很容易记住。
虽然我认为正则表达式是一个必要的工具,但关于它们最烦人的事情是有不同的实现。语法、修饰语,尤其是“贪婪”的细微差异会让事情变得非常混乱,需要反复试验,有时还会产生令人困惑的错误。
问题是正则表达式潜在地非常强大,以至于可以使用它们做一些应该使用不同的东西来做的事情。
一个好的程序员应该知道在什么地方使用它们,在什么地方不使用。典型的例子是解析非常规语言(请参阅确定一种语言是否为常规语言)。
我认为如果一开始就限制自己使用真正的正则表达式(没有扩展),就不会出错。一些扩展可以使您的工作更简单一些,但是如果您发现一些很难用真正的正则表达式来表达的东西,这很可能表明正则表达式不是正确的工具。