【问题标题】:How to determine the "tipping point" especially when programming regex's?如何确定“临界点”,尤其是在编程正则表达式时?
【发布时间】:2009-11-09 11:34:45
【问题描述】:

生日,

编辑:虽然这个问题涵盖了很多编程中可能出现的情况,但我一直注意到使用正则表达式时有一点,尤其是。在 Perl 和 shell 编程中,试图捕捉最后几个边缘情况:

  • 需要更多时间来扩展您的正则表达式,这可能意味着
  • 正则表达式过于复杂,导致
  • 由于正则表达式的复杂性,未来的维护令人头疼,尤其是在它不在 Perl 中的情况下,因此没有很好的 /x 选项可以让您轻松记录正则表达式片段。

我正在回答这个问题“Is there a fairly simple way for a script to tell (from context) whether “her” is a possessive pronoun?”,我的部分回答是,你已经到了这样一个地步,即不值得花费额外的精力和时间来扩展你的正则表达式、shell 脚本、等等。标记边缘情况并手动检查它们变得更容易。

这让我想知道人们是否有一种简单的方法来意识到他们正在达到这种类型的临界点?还是只有经验才有的东西?

顺便说一句,虽然this other question is also about "tipping points",但它关注的是何时决定开始自动化文件操作,而不是何时“足够了”。

【问题讨论】:

  • 这个问题肯定不限于正则表达式或shell脚本。您可能需要重新标记它。
  • @Yaakov,我知道它可以应用于更广泛的主题,但对我来说,主要的例子是增加正则表达式的复杂性,以尝试捕捉最后一两个边缘情况。我会尝试添加一个注释,看看我是否可以添加一些其他标签。干杯哦,+1顺便说一句(-:

标签: regex shell complexity-theory


【解决方案1】:

每当我觉得我的 regex 或 shell 脚本制作任务所花费的时间与我手动完成工作所花费的时间大致相同时,我就知道我已经达到了“临界点”。

然后,如果它是用于更大任务的快速而肮脏的工具,我将按照您的描述进行:大部分工作都带有正则表达式/脚本和边缘情况,并标记和手动处理。

如果这是可以重用的东西(例如在自动回归测试中),我会花时间来增强我的工具(拆分任务或切换到 perl)和/或确保输入符合某些假设。

【讨论】:

    【解决方案2】:

    大多数正则表达式引擎允许您在线记录正则表达式。如果他们不这样做,通常有techniques 可用于使它们可读。我将忽略这部分问题并假设正则表达式可以被充分记录。

    我认为问题不在于正则表达式的复杂性,而在于正则表达式的适当性。正则表达式可能又长又复杂,但如果它适合解决问题,那么非正则表达式解决方案将至少同样复杂,而且肯定更长。

    问题是当正则表达式被滥用来解决另一种类型的问题时。大量使用环视往往表明了这一点。如果更容易遵循以直接方式解决相同问题的常规代码序列,那么这就是正确的解决方案,无论正则表达式有多短。

    【讨论】:

    • @Jeremy,感谢您提供指向 Martin Fowler 有趣论文的链接。
    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    相关资源
    最近更新 更多