理论上正则表达式等价是一个难题,具有指数空间和时间复杂度的天真解。但是出于实际目的,是否存在正则表达式的近似等价度量?
我正在考虑从第一个正则表达式生成随机字符串,然后检查另一个正则表达式,然后以另一种方式重复它。有更优雅的支票吗?
相关链接:
PS:我想在java中编写方法,虽然欢迎一般的解决方案和想法。
答案 0 :(得分:1)
我认为您的解决方案无法完美运作。
假设您要比较".*1"
和".*2"
等正则表达式,
使用您的朴素算法,它将继续执行而不会停止。
最好使用NFA
,并将其最小化为两个正则表达式。
如果您达到类似的DFA
,那么您可以比较两个正则表达式。
请参阅 this 了解DFA
s的等效性。
我建议的另一种方式:
假设让S1
和S2
成为要比较的正则表达式。
据我所知,S1
将生成一种语言L1
(由S1生成的字符串集),
S2
将生成一种语言L2
。
我们可以检查两种语言的等同性。
有关详细信息,请参阅 Deciding equivalence of regular languages 。