是否有任何解决方案可以比较两个正则表达式的包容,部分重叠,不相交,即我想知道如何比较两个正则表达式。其次,如果正则表达式1由正则表达式2取代,我可以组合两个正则表达式。
答案 0 :(得分:4)
假设您有两个表达式A和B,并希望查看A是否匹配B的子集。
您需要计算B的最小化DFA,然后将这两个表达式组合在一起构成A和B的并集,然后计算该新表达式的最小化DFA。如果这两个DFA相等,那么A匹配B的子集。
从本质上讲,如果不经过构建最小化自动机的过程,就无法正确检查。但是,它会给出一个可验证的真实答案。
组合这两个表达式可以通过创建一个像(A)|(B)
这样的新表达式来完成,如果你的引擎支持那个,可能会用paranthesis代替非捕获变量。
如果你决定全力以赴做算法,我已经写了一系列关于这个过程的文章:
http://binarysculpting.com/2012/03/21/dfa-state-minimization/
要比较两个自动机,您可以检查状态和转换是否相同。他们应该完全平等。