我的一位开发人员已经开始使用RegexBuddy来帮助解释遗留代码,这是我完全理解和支持的一种用法.我担心的是使用正则表达式工具编写新代码.我实际上不鼓励在我的团队中使用新代码.两个引号浮现在脑海中:
有些人在面对问题时会想"我知道,我会使用正则表达式".现在他们有两个问题. - 杰米·扎温斯基
和:
调试的难度是首先编写代码的两倍.因此,如果您尽可能巧妙地编写代码,那么根据定义,您不够聪明,无法对其进行调试. - Brian Kernighan
我担心的是(分别:)
该工具可以使用真正不需要它的复杂正则表达式来解决问题.(另见这个问题).
我的一个开发人员,使用正则表达式工具,将开始编写正则表达式(即使有注释)也不能由没有(并且知道如何使用)正则表达式工具的任何人维护.
我应该鼓励还是不鼓励使用正则表达式工具,特别是在生成新代码方面?我的担忧是否合理?还是我是偏执狂?
糟糕的编程很少是工具的错误.开发人员不理解该工具是错误的.对我来说,这就像是说木匠不应该拥有一把螺丝刀,因为他可能会使用一个螺钉,钉子会更合适.
正则表达式只是您可以使用的众多工具之一.我一般不同意经常引用的Zawinski引用,就像任何技术或技术一样,有好的和坏的方法来应用它们.
就个人而言,我认为像RegexBuddy和免费的Regex Coach这样的东西主要是学习工具.有时候它们可以帮助调试或理解现有的正则表达式,但一般来说,如果你使用工具编写正则表达式,那么维护它就很难了.
作为一名Perl程序员,我对正常表达式的好坏非常熟悉,并且多年来一直在生产代码中成功使用复杂的正则表达式.以下是我喜欢从各个地方收集的一些指导原则:
当字符串匹配时,不要使用正则表达式.我经常看到人们使用正则表达式的代码,以便不区分大小写匹配字符串.只需对字符串进行小写或大写,然后执行标准字符串比较.
不要使用正则表达式来查看字符串是否是几个可能的值之一.这不必要地难以维护.而是将可能的值放在数组中,哈希(无论您的语言提供什么),并根据这些值测试字符串.
写测试!拥有一组专门针对正则表达式的测试可以使开发变得更加容易,特别是如果它是一个模糊的复杂的.此外,一些测试通常可以回答维护程序员可能对您的正则表达式提出的许多问题.
用较小的部分构造你的正则表达式.如果你真的需要一个复杂的大型正则表达式,可以用较小的,可测试的部分构建它.这不仅使开发更容易(因为您可以单独确定每个较小的部分),但它也使代码更具可读性,灵活性并允许进行彻底的注释.
将正则表达式构建为专用的子例程/函数/方法.这使得为正则表达式(只有正则表达式)编写测试非常容易.它还使得使用正则表达式的代码更容易阅读(一个名称很好的函数调用比随机标点符号块要小得多!).将巨大的正则表达式放入代码块的中间(它们不能单独进行测试)是非常常见的,通常很容易避免.