用于检查两个正则表达式是否相等/同构的库

时间:2012-03-07 18:27:02

标签: c++ python c regex nfa

我需要一个库,它将接收两个正则表达式并确定它们是否是同构的(即匹配完全相同的字符串集) 例如,a | b与[ab]

同构

据我了解,正则表达式可以转换为NFA,在某些情况下可以有效地转换为DFA。然后可以将DFA转换为最小DFA,如果我理解正确的话,它是唯一的,因此可以比较这些最小DFA的相等性。我意识到并非所有正则表达式NFA都可以有效地转换为DFA(特别是当它们是从Perl Regexps生成而不是真正的“常规”时),在这种情况下理想情况下,库只会返回错误或其他指示转换是不可能。

我在网上看到大量关于这样做的文章和学术论文(甚至还有一些课程要求学生这样做的编程任务),但我似乎无法找到实现这一功能的库。我更喜欢Python和/或C / C ++库,但是任何语言的库都可以。有谁知道这样的图书馆?如果没有,有人知道我可以用作起点的图书馆吗?

2 个答案:

答案 0 :(得分:10)

没有尝试过,但Perl的Regexp:Compare看起来很有希望:如果第一个的语言是第二个的子集,则两个正则表达式是等价的,反之亦然。

答案 1 :(得分:0)

Java的brics automaton library也支持这一点。您可以将正则表达式转换为DFA,并检查它们是否相同。