标签: regex parsing nfa
正则表达式x{m, n}从前一个m的{{1}}到n的重复项中进行匹配,尝试匹配尽可能多的内容。
x{m, n}
m
n
我有一个幼稚的解决方案,但是节点和边的数量取决于x和m,而当n大时,这是不可接受的。
x
那么,有什么有效的方法可以将正则表达式转换为 NFA ?
答案 0 :(得分:1)
不幸的是,NFA不能很好地“计数”。从本质上讲,您将必须手动将正则表达式扩展为Thompsons的构造可以处理的东西。例如
m{2,5} -> mm(m(m(m)?)?)?
搜索功能SimplifyRepeat here以查看Google的实现。有关实际使用的正则表达式的更多信息,请参见this page。
SimplifyRepeat