【问题标题】:How can I use Boost::regex.hpp library in C++?如何在 C++ 中使用 Boost::regex.hpp 库?
【发布时间】:2011-03-02 13:43:51
【问题描述】:

我尝试使用 Boost 库但失败了,请参阅我的代码:

#include "listy.h"
#include <boost/regex.hpp>
using namespace boost;

ListyCheck::ListyCheck() {

}

ListyCheck::~ListyCheck() {

}

bool ListyCheck::isValidItem(std::string &__item) {
    regex e("(\\d{4}[- ]){3}\\d{4}");

    return regex_match(__item, e);
}

当我尝试编译它时,我收到了这些消息:

/usr/include/boost/regex/v4/regex_match.hpp:50: 未定义的引用 `boost::re_detail::perl_matcher<:__normal_iterator> >, 标准::分配器, std::allocator > > > >, boost::regex_traits >

::match()'

/usr/include/boost/regex/v4/basic_regex.hpp:425: 未定义的引用 `boost::basic_regex >

::do_assign(char const*, char const*, unsigned int)'

/usr/include/boost/regex/v4/perl_matcher.hpp:366: 未定义的引用 `boost::re_detail::perl_matcher<:__normal_iterator> >, 标准::分配器, std::allocator > > > >, boost::regex_traits >

::construct_init(boost::basic_regex >> 常量&, boost::regex_constants::_match_flags)'

等等……

【问题讨论】:

    标签: c++ regex boost boost-regex


    【解决方案1】:

    您需要链接到libboost_regex。如果您使用 gcc,请将 -lboost_regex 添加到编译器开关。

    【讨论】:

      【解决方案2】:

      这些是链接器错误。 Boost 正则表达式库不是像 shared_ptr (例如)这样的仅标头库 - 您需要链接到 .a 或 .lib 或任何二进制库。

      【讨论】:

        【解决方案3】:

        你必须链接到 boost_regex。

        【讨论】:

          【解决方案4】:

          有类似的问题。

          解决方案是通过 cmake 与命令目标链接库链接:

          target_link_libraries(boostGraph Boost::regex Boost::date_time Boost::system Boost::filesystem Boost::thread Boost::graph Boost::program_options)
          

          使用此处提供的语法 -lboost_regex 不起作用(至少不适用于 cmake)

          根本问题可能是不同版本的库导致问题,即使编译器和链接器确实找到了正则表达式库。

          【讨论】:

            猜你喜欢
            • 2011-04-27
            • 2021-08-02
            • 2018-08-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-15
            • 2014-08-13
            • 1970-01-01
            相关资源
            最近更新 更多