2012-07-15 141 views
1

我无法编译下面的代码:编译简单代码的boost ::正则表达式

#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++ regexp_test.cpp -o regexp_test.o 

也试过:

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

但我得到这个长的错误:

/tmp/ccyEpQIk.o: In function 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 to boost::re_detail::perl_matcher >, boost::regex_traits > >::match()' /tmp/ccyEpQIk.o: In function 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 to boost::basic_regex > >::do_assign(char const*, char const*, unsigned int)' /tmp/ccyEpQIk.o: In function 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 to boost::re_detail::perl_matcher >, boost::regex_traits > >::construct_init(boost::basic_regex > > const&, boost::regex_constants::_match_flags)' collect2: ld returned 1 exit status

我做错了什么?

回答

2

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

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

1

下载Boost库则只有-lboost_regex如果你正在使用Ubuntu然后键入将工作

这在终端中将安装所有的boost库。

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

并按照说明进行更改。