计算正则表达式效率

时间:2011-07-27 02:02:48

标签: ruby regex algorithm

如何计算/查找正则表达式匹配给定字符串所需的操作数?我想开发一个程序,允许你按效率排列正则表达式。

此外,如果操作次数超过给定阈值,是否可以打破正则表达式?我希望将其变成一个Web应用程序,所以我不希望用户输入可能会杀死服务器的正则表达式(如果可能的话)。

非常感谢。

编辑:为了澄清,我指的是普通正则表达式的超集,其中包括回溯(因此是非线性的)。

2 个答案:

答案 0 :(得分:4)

找出解析给定字符串所需的操作数量的方法是解析它并计算操作数。你可以做一些有限的静态分析,但一个明确的答案就等于解决停止问题。

尝试为任何输入排序表达式甚至更复杂。取表达式A[0-9]+

  • 字符串“A999”将匹配,并且大约花费O(n)时间。
  • 字符串“B943”将立即失败,耗时O(1)。

正则表达式解析器基本上只是一个程序。几乎总是不可能说一个程序比一般程序更快,仅用于特定输入。

您可以尝试使用基于对输入可能是什么的一些理解的静态分析。例如,可以立即消除大部分公共输入的表达式可能比不使用的表达式快。我想说,这样做的唯一方法是接受一个表达式的数据集,该表达式与被解析的表达式具有相似的分布,并使用该数据进行基准测试[简单]或分析[硬]。

答案 1 :(得分:0)

操作数也取决于输入字符串。您无法计算操作次数,但可以计算其他正则表达式执行匹配与相同字符串之间的时间差异。