检查Regex是否生成给定模式

时间:2013-07-04 09:44:33

标签: regex performance algorithm pattern-matching

我有一个正则表达式和一个匹配的模式字符串。我需要检查模式是否是由正则表达式生成的有效字符串。

现在问题变得有趣了,因为正则表达式只能包含'*'字符和预定义的字母集(a-z)。

此处'*'具有以下含义:

if regex is "a*": its closure { '','a','aa','aaa',.. }
if its "ab*c" : its closure { 'ac','abc','abbc', ... }

现在,有一个回溯解决方案,检查所有可能性。

我很想知道,自we only have " * " as a special symbol以来,我们能否以更好的复杂性做到这一点。

1 个答案:

答案 0 :(得分:0)

  

我们能以更好的复杂性做到吗?

是。只是省略回溯,你没有需要它们的替代。只有你必须规范你的正则表达式:

  1. X*X的所有出现更改为XX*
  2. X*X*的所有出现更改为X*
  3. 这可以线性复杂度(关于正则表达式长度)来完成;那么你可以在一次传递中循环输入字符串(关于输入长度的线性复杂度)。