识别文件中的搜索和替换操作

时间:2011-01-28 09:54:08

标签: algorithm

想象一下,您有一个源文件,其中有人使用简单的文本替换将一个符号重命名为另一个符号。该文件的diff输出通常很长,并不是发生了什么的非常有用的标识符。你想知道的是,改变只是s/a/b/g,如果是ab是什么 - 你不会事先告诉这个工具,它会必须自己解决。 (为了论证,你可以假设'a'和'b'不包含换行符。)

  • 您会使用什么算法来发现搜索和替换? (易)
  • 如果进行了多次文字替换,你会如何使其发挥作用? (相当容易)
  • 如果没有比较任何一个原始文件,你会如何编写它来处理diff输出? (相当难)
  • 你可以用多远来解决这个问题识别正则表达式匹配而不是搜索/替换? (硬)
  • 在一个包含这种变化的文件中,你能想出一个能够产生sed表达式并缩短差异的启发式算法吗? (硬)

这对于那些喜欢设计算法的人来说是一个问题,但它基于我想要使用的实际工具,所以如果您碰巧知道一个很好的命令行工具,可以执行上述任何工作,奖励积分。 ;)

2 个答案:

答案 0 :(得分:1)

我现在想到的两个选项:

  • 运行/s/b/a/g并对文件进行区分(虽然这显然不会在正则表达式中发现错误)
  • 创建自己的差异工具,与其他工具相同,但接受某些更改而不将其显示为差异(即,如果一条线不同,并且该线在一侧仅由a不同而且b另一方面,不标记该行)

答案 1 :(得分:1)

Darcs (distributed version control system)对此类更改有特殊处理,因此它确实有一个算法。因此,请尝试查看他们的文档/询问他们。重用该算法可能有点困难,因为它是用Haskell编写的。