C++使用正则时碰到一个奇怪的问题

RT.

有这么一段代码:

string line, line2;
std::smatch results;
std::regex rStepSendStart("(^ *xxxxxx |^ccccc)(.*)", std::regex_constants::icase);
while(getline(inFile, line)){
    if(regex_match(line, results, rStepSendStart)){
        line.append(results.str()); // ???
        for (size_t i = 0; i < results.size(); ++i) {
            PLOGD<<i<<(string)results[i]; 
        }			
    }
    ...
}

当有这么一句 line.append(results.str());,在for循环中使用 results[i]则会报错:

开始以为是results.str()的问题,最后发现是line的问题。
比如是给Line2追加

line2.append(results.str());

就不会报错。看来是在获取子序列前不能修改原字符串。更深层的原因还不清楚。

posted @ 2022-06-24 15:03  姜小豆  阅读(28)  评论(0编辑  收藏  举报