近似正则表达式等价

时间:2014-01-03 11:14:37

标签: java regex

理论上正则表达式等价是一个难题,具有指数空间和时间复杂度的天真解。但是出于实际目的,是否存在正则表达式的近似等价度量?

我正在考虑从第一个正则表达式生成随机字符串,然后检查另一个正则表达式,然后以另一种方式重复它。有更优雅的支票吗?

相关链接:

PS:我想在java中编写方法,虽然欢迎一般的解决方案和想法。

1 个答案:

答案 0 :(得分:1)

我认为您的解决方案无法完美运作。

假设您要比较".*1"".*2"等正则表达式, 使用您的朴素算法,它将继续执行而不会停止。

最好使用NFA,并将其最小化为两个正则表达式。

如果您达到类似的DFA,那么您可以比较两个正则表达式。

请参阅 this 了解DFA s的等效性。

我建议的另一种方式

假设让S1S2成为要比较的正则表达式。 据我所知,S1将生成一种语言L1(由S1生成的字符串集), S2将生成一种语言L2

我们可以检查两种语言的等同性。

有关详细信息,请参阅 Deciding equivalence of regular languages