2012-07-15 64 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' 

並按照說明進行更改。