如何确定“引爆点”,尤其是在编写正则表达式时?

时间:2009-11-09 11:34:46

标签: regex shell complexity-theory

天儿真好,

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

  • 需要更多时间来扩展你的正则表达式,这可能意味着
  • 正则表达式过于复杂,导致
  • 由于正则表达式的复杂性而导致的未来维护问题,特别是在Perl不存在的情况下,因此没有很好的/ x选项可以让您轻松记录正则表达式碎片。

我正在回答这个问题“Is there a fairly simple way for a script to tell (from context) whether “her” is a possessive pronoun?”,我的答案部分是你到了追逐最后几个百分点的边缘情况不值得额外的努力和时间来扩展你的正则表达式,shell只是标记边缘情况并手动完成它们变得更容易。

让我想知道人们是否有一种简单的方式来意识到他们正在达到这种类型的引爆点?或者只是经验带来的东西?

BTW虽然this other question is also about "tipping points",但它决定何时决定开始自动化文件操作,而不是“足够的时候”。

2 个答案:

答案 0 :(得分:1)

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

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

问题在于正在使用正则表达式来解决另一类问题。大量使用环视通常表明了这一点。如果更容易遵循一系列以直接方式解决相同问题的常规代码,那么无论正则表达式有多短,这都是正确的解决方案。

答案 1 :(得分:1)

每当我觉得我的正则表达式或shell脚本制作任务大约花费我手动操作的时间时,我知道我已经达到了“引爆点”。

然后,如果它是一个快速而肮脏的工具,可以执行更大的任务,我会按照您的描述进行操作:大部分工作都使用正则表达式/脚本和边缘案例进行标记和手动处理。

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