提升正则表达式错误:未初始化的boost :: match_results

时间:2014-03-04 18:35:33

标签: c++ regex exception boost

运行以下内容时

    bool my_compare(const std::string& string_1, const std::string& string_2)
    {
        const boost::regex str_re("so(m)e_(r)e(g)ex");
        boost::smatch str_match;     

        size_t one;
        uint8_t two;
        size_t three;
        if( boost::regex_search(string_1, str_match, str_re) ) {
            one = boost::lexical_cast<size_t>( std::string(str_match[1].first, match[1].second) );
            two = boost::lexical_cast<uint8_t>( std::string(str_match[2].first, match[2].second) );
            three = boost::lexical_cast<size_t>( std::string(str_match[3].first, match[3].second) );
        }
        size_t four;
        uint8_t five;
        size_t six;
        if( boost::regex_search(string_1, str_match, str_re) ) {
            four = boost::lexical_cast<size_t>( std::string(str_match[1].first, match[1].second) );
            five = boost::lexical_cast<uint8_t>( std::string(str_match[2].first, match[2].second) );
            six = boost::lexical_cast<size_t>( std::string(str_match[3].first, match[3].second) );
        }
        return false;
    }

    int main()
    {
       my_compare(some_string1, some_string2);
       return 0;
    }

我收到以下错误,我不明白:

  

在抛出一个实例后终止调用   “增强:: exception_detail :: clone_impl

     
    

'what():错误的词法转换:源类型值无法解释为目标

  

1 个答案:

答案 0 :(得分:1)

  

"so(m)e_(r)e(g)ex"

此正则表达式将使用字符串str_match[1]填充捕获"m",使用字符串str_match[2]填充"r",使用字符串str_match[3]填充"g" < / p>

 boost::lexical_cast<size_t>( std::string(str_match[1].first, match[1].second) );

这将尝试将字符串"m"转换为类型size_t的值,该值失败(“m”不是整数!),并抛出异常

  

'what():错误的词法转换:源类型值无法解释为目标

(顺便说一下,你不需要从一对迭代器中使用字符串构造函数跳转这些箍,子匹配可以直接转换为字符串)