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

标签 c++ regex visual-c++ serialization boost-regex

我正在使用 <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/

相关文章:

.net - VC++ 代码 DOM 可以从 VS 插件访问吗?

c++ - 这是 C++ Primer Plus(第六版)中的错字吗

c++ - 测试自定义标准兼容容器

c++ - fstream open() Mac OS X 中的相对路径不起作用

带有 if/else 条件的正则表达式正向预测

c++ - 更新 Windows 窗体 - Visual C++

c++ - 有没有办法创建 Visual Assist 特定的预处理器部分?

c# - 如何使用正则表达式在定义的单词之间捕获任意字符串?

Java 正则表达式 : match whole word with word boundary

c - 如何在 C 中的 Factorial while 循环内找到数字的平方?