正则表达式:使用DFA

时间:2017-07-07 15:35:21

标签: regex

我一直想知道正则表达式匹配器的搜索模式背后的理论。所以,假设我有一个匹配aab的正则表达式,如果在字符串的开头不是match,我希望能够从字符串的任何位置开始执行此匹配。我的意思是 - 在匹配模式下,我只能验证字符串aab是否与正则表达式一致,而另一方面search这应该与aaab生成相应的跨度结果一起使用。 所以超级具体 - 有没有办法建立DFA searcher,或者这根本不可能,因为它需要你在DFSM中不能拥有的额外内存。很明显,你可以通过在{for循环中重新应用searcher来输入matcher来构建matcher,但这种方法的复杂性类似于O(len_of_pattern * len_of_input)

2 个答案:

答案 0 :(得分:1)

我认为你基本上回答了自己的问题。与现代正则表达式实现中的许多其他功能一样,搜索利用内存的奇迹来完成使用有限自动机无法实现的功能。传统上,DFA不能循环遍历字符串或沿输入回溯,因为这需要内存。搜索需要能够找到匹配项,然后了解匹配项如何适合字符串。

答案 1 :(得分:1)

正则表达式搜索器基本上与正则表达式匹配器相同,.*加到表达式的前面。