avg*_*tvs 45 regex algorithm complexity-theory
我不是新手使用正则表达式,我理解他们所基于的基本理论 - 有限状态机.
我不太擅长算法分析,也不理解正则表达式与基本线性搜索的比较.我问,因为从表面上看,它似乎是一个线性阵列搜索.(如果正则表达式很简单.)
我在哪里可以了解有关实现正则表达式引擎的更多信息?
por*_*ges 48
这是最受欢迎的大纲之一:正则表达式匹配可以简单快速 .针对字符串运行DFA编译的正则表达式确实是O(n),但是可能需要最多O(2 ^ m)的构造时间/空间(其中m =正则表达式大小).
您是否熟悉术语确定性/非确定性有限自动机?
真正的正则表达式(当我说真实时我指的是那些识别常规语言的正则表达式,而不是几乎所有编程语言包含反向引用的正则表达式等)都可以转换为DFA/NFA,并且两者都可以在编程语言中的机械方式(NFA可以转换为DFA)
你要做的是:
这样,给定正则表达式,您可以将其转换为DFA并运行它以查看它是否匹配指定的文本.
这可以实现O(n),因为DFA不会后退(如图灵机),所以它匹配或不匹配.假设您不会接受计数重叠匹配,否则您将不得不重新开始匹配...
经典正则表达式可以在实践中快速实现,但具有非常糟糕的最坏情况行为(标准DFA)或以确保合理的最坏情况行为(将其保持为NFA)的方式实现.可以扩展标准DFA以支持许多额外匹配的字符和标志,这些字符和标志利用了它基本上是跟踪搜索的事实.
标准方法的示例无处不在(例如内置于Perl中).有一个例子声称在http://code.google.com/p/re2/上有一个好的最坏情况行为- 实际上它比我在最坏的情况下预期的要好,所以他们可能已经找到了额外的一招或者两个.
如果你在所有的兴趣在此,或关心编写,可向锁固给出病理输入程序,读取http://swtch.com/~rsc/regexp/regexp1.html.