在探索正则表达式(也称为正则表达式)时,有许多人似乎将正则表达式视为圣杯。看起来如此复杂的东西——一定是任何问题的答案。他们倾向于认为每个问题都可以用正则表达式解决。
另一方面,也有很多人不惜一切代价试图避免正则表达式。他们试图找到一种绕过正则表达式的方法,并仅仅为了它而接受额外的编码,即使正则表达式将是一个更紧凑的解决方案。
为什么正则表达式被认为如此有争议?关于它们的工作原理是否存在广泛的误解?或者正则表达式通常比较慢是一种普遍的看法?
在探索正则表达式(也称为正则表达式)时,有许多人似乎将正则表达式视为圣杯。看起来如此复杂的东西——一定是任何问题的答案。他们倾向于认为每个问题都可以用正则表达式解决。
另一方面,也有很多人不惜一切代价试图避免正则表达式。他们试图找到一种绕过正则表达式的方法,并仅仅为了它而接受额外的编码,即使正则表达式将是一个更紧凑的解决方案。
为什么正则表达式被认为如此有争议?关于它们的工作原理是否存在广泛的误解?或者正则表达式通常比较慢是一种普遍的看法?
当前回答
因为它们缺少普遍接受的ide中最流行的学习工具:没有Regex Wizard。甚至连自动补全都不行。你必须自己编写整个程序。
其他回答
正则表达式允许您以紧凑的方式编写自定义有限状态机(FSM)来处理输入字符串。为什么使用正则表达式很难,至少有两个原因:
Old-school software development involves a lot of planning, paper models, and careful thought. Regular expressions fit into this model very well, because to write an effective expression properly involves a lot of staring at it, visualizing the paths of the FSM. Modern software developers would much rather hammer out code, and use a debugger to step through execution, to see if the code is correct. Regular expressions do not support this working style very well. One "run" of a regular expression is effectively an atomic operation. It's hard to observe stepwise execution in a debugger. It's too easy to write a regular expression that accidentally accepts more input than you intend. The value of a regular expression isn't really to match valid input, it's to fail to match invalid input. Techniques to do "negative tests" for regular expressions are not very advanced, or at least not widely used. This goes to the point of regular expressions being hard to read. Just by looking at a regular expression, it takes a lot of concentration to visualize all possible inputs that should be rejected, but are mistakenly accepted. Ever try to debug someone else's regular expression code?
如果现在软件开发人员对使用正则表达式有抵触情绪,我认为主要是由于这两个因素。
因为它们缺少普遍接受的ide中最流行的学习工具:没有Regex Wizard。甚至连自动补全都不行。你必须自己编写整个程序。
问题是正则表达式潜在地非常强大,以至于可以使用它们做一些应该使用不同的东西来做的事情。
一个好的程序员应该知道在什么地方使用它们,在什么地方不使用。典型的例子是解析非常规语言(请参阅确定一种语言是否为常规语言)。
我认为如果一开始就限制自己使用真正的正则表达式(没有扩展),就不会出错。一些扩展可以使您的工作更简单一些,但是如果您发现一些很难用真正的正则表达式来表达的东西,这很可能表明正则表达式不是正确的工具。
你可能会问为什么goto会有争议。
基本上,当你拥有这么多“显而易见”的权力时,人们倾向于在它们不是最佳选择的情况下滥用它们。例如,要求用正则表达式解析csv或XML或HTML的人的数量让我感到震惊。这不是做这项工作的合适工具。但是一些用户还是坚持使用正则表达式。
就我个人而言,我试图找到一个中庸之道——在正则表达式擅长的地方使用它们,在它们不是最优的时候避免使用它们。
请注意,正则表达式仍然可以用于解析csv、XML、HTML等。但通常不是在一个正则表达式中。
人们倾向于认为正则表达式很难;但那是因为他们用错了。在没有任何注释、缩进或命名捕获的情况下编写复杂的一行程序。(你不会把复杂的SQL表达式塞进一行,没有注释、缩进或别名,对吧?)所以,是的,对很多人来说,它们没有意义。
然而,如果你的工作与文本解析有关(基本上所有的web应用程序都是如此),而你不懂正则表达式,那你的工作就糟透了,你在浪费自己和雇主的时间。有很好的资源可以教你关于他们的一切,你需要知道的,甚至更多。