代码之家  ›  专栏  ›  技术社区  ›  Rob Wells

如何确定“临界点”,尤其是在编程regex时?

  •  3
  • Rob Wells  · 技术社区  · 15 年前

    G'Day.

    编辑: 虽然这个问题涵盖了编程中可能出现的情况,但我始终注意到,在使用regex时,尤其是在Perl和Shell编程中,有一点需要尝试捕获最后几个边缘情况:

    • 需要更多的时间来扩展regex,这意味着
    • regex过于复杂,导致
    • 由于regex的复杂特性,将来的维护工作会很麻烦,尤其是在不使用perl的情况下,这样就没有nice/x选项可以让您轻松地记录regex片段。

    我在回答这个问题” Is there a fairly simple way for a script to tell (from context) whether “her” is a possessive pronoun? “我的部分答案是,你达到了这样一个程度,即追查最后百分之几的边缘案例不值得付出额外的努力和时间来扩展你的regex、shell脚本等。仅仅标记边缘案例并手动完成它们会变得更容易。

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

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   mouviciel    15 年前

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

    然后,如果它是一个用于更大任务的快速而肮脏的工具,那么我将按照您描述的方式继续:大部分工作都是使用regex/script和标记并手动处理的边缘案例。

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

        2
  •  1
  •   Jeremy Stein    15 年前

    大多数regex引擎允许您在线记录regex。如果他们没有,通常 techniques 使其可读。我将忽略这部分问题,并假设regex可以被充分地记录下来。

    我认为问题不在于正则表达式A的复杂性,而在于正则表达式的适当性。正则表达式可以是长的和复杂的,但是如果它适合这个问题,那么非正则表达式的解决方案至少也会是复杂的,而且肯定会更长。

    问题是当Regex被滥用以解决另一类问题时。大量使用环顾往往表明这一点。如果遵循一系列以直接方式解决相同问题的常规代码更容易,那么这就是正确的解决方案,不管regex有多短。