从输入中导出最小正则表达式
Derive minimal regular expression from input
我有一个远程"代理",当传递字符串时返回"是"或"否"。与这个代理通信是昂贵的,所以我希望找到一个库,它将允许我迭代地构建一个正则表达式给定的正反馈和负反馈,同时对它的构造是智能的。这将允许我在发送端缓存答案。
例如,假设我们用"good"查询代理并收到"yes"。初始派生的正则表达式应该是"good"。
假设我用"goop"查询然后收到一个"yes"。我希望派生的正则表达式是"good [dp]",而不是"good|goop"。
等等。
我不需要在我的派生正则表达式中回溯或任何其他奇特的非线性时间操作。据推测,生成的正则表达式将是一个DFA。有人知道任何c/c++正则表达式库能够做到这一点吗?或者,解释为什么这是一个愚蠢的想法,并为我的实际问题提供更好的解决方案也会很有用。
您可以使用Trie而不是正则表达式。
然后对每个新字符串遍历树,每个字符遍历一个节点。我怀疑您还需要一个用于字符串结束的标记字符—一旦到达该字符,如果节点存在,它将保存是/否答案。
好吧,除非我在你的情况下遗漏了什么,我认为内存足够便宜,可以直接实现一个愚蠢的缓存-例如,<std::string, bool>
的unordered_map。这不仅更容易构建,而且可能更快,因为您正在构建散列映射。唯一的缺点是,如果要用无数个不同的键查询远程服务,那么这可能不是最好的方法。
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 使用正则表达式获取大括号块的列表
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 如何使用正则表达式将输入数字格式化为字符串
- 正则表达式在开头单独匹配单词,或者在输入结束时通过不重复字符串附加到某些内容但附加到某些内容
- 通过getline()输入,正则表达式无法正常工作
- 检查输入字符串是否为数字且为C++,如果是,则将其转换为 int(正则表达式?
- 使用正则表达式进行输入验证
- 使用正则表达式检查输入的有效性
- 正则表达式的输入掩码
- 正则表达式库,用于维护状态,逐个字符接受输入,并在找到匹配时返回true
- 使用正则表达式验证输入
- 从输入中导出最小正则表达式