gpt4 book ai didi

c++ - 如何将已编译的正则表达式 (std::regex) 保存/序列化到文件中?

转载 作者:太空狗 更新时间:2023-10-29 21:29:34 25 4
gpt4 key购买 nike

我正在使用 <regex>来自 Visal Studio 2010。我知道当我创建 regex 对象时它会被编译。没有像其他语言和库中那样的编译方法,但我认为这就是它的工作方式,对吗?

我需要在一个文件中存储大量这种已编译的正则表达式,这样我就可以获取内存块 block 并获取我已编译的正则表达式。

我不知道该怎么做。我发现在 PCRE 中是 possible但它是 Linux 库。有一个 Windows [版本 2但它已经 3 岁了,我想使用更高级的方法(windows 版本中没有 c++ 包装器)。

那么可以使用save std:regex吗?或 boost::regex (是一样的吗?)作为一 block 内存然后简单地重用它?

或者是否有其他适用于 Windows 的简单库可以做到这一点?

编辑:感谢伟大的答案。我将简单地检查将正则表达式简单地存储为字符串是否足够,然后如果它仍然很慢,我将测试它并将其与这个旧的 PCRE 库进行比较。

最佳答案

您可以将正则表达式字符串本身用作“序列化”正则表达式 - 只需将它们保存到一个文件中,然后当您想要重构 regex 对象时,只需将保存的字符串传递给 regex 构造函数。

我能想到的唯一缺点:

  • “重建”正则表达式数据库可能需要更多时间,但我真的不知道需要多少时间(我怀疑无论如何时间都会被 I/O 支配,所以我不确定是否有差异会很重要——我真的不知道 boost 库的实现在正则表达式编译中有多少开销)
  • 如果你想混淆存储的正则表达式,你必须自己做,而不是依赖于编译后的二进制状态是不可读的

这样做的好处是:

  • 它 100% 受支持,因此不易碎
  • 它可以跨编译器版本和平台移植(即,不易碎/脆弱)

编译正则表达式数据库(不包括 I/O)的时间是否真的足够重要以保证尝试保存编译状态?

关于c++ - 如何将已编译的正则表达式 (std::regex) 保存/序列化到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4499808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com