假设给出了两个正则表达式字符串:
boost::regex r1 = "[AB]";
boost::regex r2 = "[ABCDEF]";
是否有一种简单的方法可以用boost :: regex确定r1是否是r2的子集?
在上面的例子中,r1是r2的子集。
boost :: regex_match使用字符串和正则表达式参数。但是使用两个正则表达式的东西会很好。
这个问题仅与c ++和boost :: regex库有关。
答案 0 :(得分:0)
将正则表达式转换为DFA图g1和g2。
定义g1'和g2'与接受状态相反的相同图表。
定义a = g1 x g2'和b = g1' x g2,您可以在其中跟踪输入的两组状态。 a和b的接受状态是在两个源产品图中都接受的状态。
a接受的字符串是r1接受而r2不接受的字符串。
b接受的字符串是r2接受的字符串,r1不接受字符串。
r1是r2的一个子集,当且仅当r1接受的每个字符串也被r2接受。
所以简单地证明a不接受任何字符串来证明r1是r2的子集。
如果你想要严格的子集,还要表明b至少接受一个字符串。
我不知道如何通过提升轻松完成任何这些操作。我不知道这些步骤是否符合" easy"。我怀疑没有,因为这个问题是PSPACE完成的。