【问题标题】:Any Regex Library for gcc 4.8gcc 4.8 的任何正则表达式库
【发布时间】:2018-01-07 22:18:33
【问题描述】:

我需要在我的应用程序中使用正则表达式。我使用的是 Boost(Regex),但 gcc 4.9 已支持。类似的标准正则表达式库仅与 >= 4.9 的 gcc 版本兼容。 是否有任何与 gcc 4.8.5 兼容的 c++ Regex 库。 注意:我无法更新 gcc 版本

【问题讨论】:

    标签: c++ regex gcc4.8


    【解决方案1】:

    在使用std::shared_ptr 的多线程程序中,我在使用 gcc 4.9 和 gcc 6.3(从 Jessie 升级到 Debian Stretch 之后)遇到了同样的问题。问题是gcc 4.9不支持std::atomic_load,这是多线程的问题。

    因此,解决方案很简单:由于 boost 和 std 共享(几乎)相同的接口,您可以创建一个 detects 编译器版本的头文件。如果是 4.9 或更高,则使用 std 正则表达式,否则,使用 boost 正则表达式:

    #ifdef __GNUC__
    #if __GNUC__ > 4 || \
        (__GNUC__ == 4 && (__GNUC_MINOR__ > 9 || \
                           (__GNUC_MINOR__ == 9 && \
                            __GNUC_PATCHLEVEL__ > 0))
    #include <regex>
    #define Regex std::regex
    #else
    #include <boost/regex.hpp>
    #define Regex boost::regex
    #endif
    #endif
    

    在你需要正则表达式的地方,使用这个文件,编译器会自动为你做所有的选择。并使用您在那里创建的新定义来调用正则表达式函数和对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      相关资源
      最近更新 更多