从输入中导出最小正则表达式

时间:2011-09-28 23:46:02

标签: c++ c regex dfa

我有一个远程“代理”,当递交字符串时返回“是”或“否”。与这个代理进行通信是很昂贵的,所以我希望找到一个库,它允许我在给出正面和负面反馈的情况下迭代地构建正则表达式,同时对其构造有所了解。这将允许我在发送方缓存答案。

例如,假设我们用“good”查询代理并收到“yes”。最初派生的正则表达式应该是“好的”。

假设我用“goop”查询然后收到“是”。我希望派生的正则表达式是“goo [dp]”,而不是“good | goop”。

等等。

我在派生的正则表达式中不需要回溯或任何其他奇特的非线性时间操作。据推测,生成的正则表达式将成为引擎盖下的DFA。有谁知道任何能够做到这一点的c / c ++正则表达式库?或者,为什么这是一个愚蠢的想法和更好的解决我的真正问题的原因也将是有用的。

2 个答案:

答案 0 :(得分:5)

您可以使用Trie

,而不是正则表达式

然后,对于每个新字符串,您将为每个字符行走一个节点。我怀疑你还需要一个标记字符作为字符串结尾 - 一旦你到达这个字符,如果节点存在,它会保持是/否答案。

答案 1 :(得分:0)

好吧,除非我在你的情况下遗漏了什么,否则我认为内存足够便宜,可以直接实现一个哑缓存 - 比如<std::string, bool>的unordered_map。这不仅会更容易构建,它也可能更快,因为您正在构建哈希映射。唯一的缺点是,如果您要使用大量不同的密钥查询远程服务,那么这可能不是最好的方法。