【问题标题】:compiling simple code with boost::regex使用 boost::regex 编译简单代码
【发布时间】:2012-07-14 10:43:58
【问题描述】:

我在编译以下代码时遇到问题:

#include <iostream>
#include <string>
#include <boost/regex.hpp>

using namespace std;

int main()
{
  string s;
  boost::regex re("^{(APPLE|ORANGE),(\\d*)}$");
  boost::cmatch matches;

  while(true)
  {
    cout << "String: ";
    cin >> s;
    if(boost::regex_match(s.c_str(), matches, re))
    {
      for(int i=1; i<matches.size(); i++)
      {
        string match(matches[i].first, matches[i].second);
        cout << "match[" << i << "]:  " << matches[i] << endl;
      }

    }
    else
    {
      cout << "no match" << endl;
    }
  }
  return 0;

}

我用下面这行代码用 g++ 编译:

g++ regexp_test.cpp -o regexp_test.o

也试过了:

g++ -lboost_regex regexp_test.cpp -o regexp_test.o

但我收到了这么长的错误:

/tmp/ccyEpQIk.o: 在函数bool boost::regex_match<char const*, std::allocator<boost::sub_match<char const*> >, char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >(char const*, char const*, boost::match_results<char const*, std::allocator<boost::sub_match<char const*> > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)': regexp_test.cpp:(.text._ZN5boost11regex_matchIPKcSaINS_9sub_matchIS2_EEEcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEbT_SA_RNS_13match_resultsISA_T0_EERKNS_11basic_regexIT1_T2_EENS_15regex_constants12_match_flagsE[bool boost::regex_match<char const*, std::allocator<boost::sub_match<char const*> >, char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >(char const*, char const*, boost::match_results<char const*, std::allocator<boost::sub_match<char const*> > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)]+0x4c): undefined reference toboost::re_detail::perl_matcher >, boost::regex_traits >::match()' /tmp/ccyEpQIk.o:在函数boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)': regexp_test.cpp:(.text._ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j[boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)]+0x22): undefined reference toboost::basic_regex > >::do_assign(char const*, char const*, unsigned int)' /tmp/ccyEpQIk.o: 在函数boost::re_detail::perl_matcher<char const*, std::allocator<boost::sub_match<char const*> >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::perl_matcher(char const*, char const*, boost::match_results<char const*, std::allocator<boost::sub_match<char const*> > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags, char const*)': regexp_test.cpp:(.text._ZN5boost9re_detail12perl_matcherIPKcSaINS_9sub_matchIS3_EEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC2ES3_S3_RNS_13match_resultsIS3_S6_EERKNS_11basic_regexIcSA_EENS_15regex_constants12_match_flagsES3_[_ZN5boost9re_detail12perl_matcherIPKcSaINS_9sub_matchIS3_EEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC5ES3_S3_RNS_13match_resultsIS3_S6_EERKNS_11basic_regexIcSA_EENS_15regex_constants12_match_flagsES3_]+0xb3): undefined reference toboost::re_detail::perl_matcher >, boost::regex_traits > >::construct_init(boost::basic_regex > > const&, boost::regex_constants::_match_flags)' collect2: ld 返回 1 个退出状态

我做错了什么?

【问题讨论】:

    标签: c++ boost boost-regex


    【解决方案1】:

    也许你没有 boost 二进制文件,代码在这里用-lboost_regex 编译。此外,大括号用于重复模式。例如 \d{3} 表示三位数,因此您可能需要将正则表达式更改为:

    boost::regex re("^(APPLE|ORANGE),(\\d*)$");

    【讨论】:

      【解决方案2】:

      下载 boost 库,然后只有 -lboost_regex 可以工作

      如果您使用的是 ubuntu,那么在终端中输入它会安装所有的 boost 库。

      'sudo apt-get install libboost-all-dev'
      

      并按照 perreal 所说的进行更改。

      【讨论】:

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