有没有办法测试正则表达式是否“包含”另一个正则表达式?
例如:
RegEX1 = "a.*b";
RegEx2 = "a1.*b";
RegEX1“包含”RegEX2。
据我所知 - 这不可能做到,我错了吗?
答案 0 :(得分:6)
是
This paper包含对该主题的详细讨论(参见第4.4节)。
答案 1 :(得分:0)
将两个表达式转换为等效的状态机,并检查两台机器中的所有路径允许相同的匹配,应该这样做。显然应该注意抽水,因此避免重新访问旧节点。
它只适用于“简单”正则表达式(或者真实,你有什么,perls递归表达式更具表现力)。
虽然状态机的图形可能具有大量路径,但它仍然应该受到限制(特别是如果表达式的源是人类的话)。因此,您可以找到RegEX1的所有允许路径,并依次检查RegEX2中是否允许这些路径。如果所有路径都有效,则您知道该路径包含在另一路径中。