具有以下代码:

boost::regex CriticalHit("<c=#f12d2d>(.+)</c>", boost::regex::icase);


想法是匹配所有

else if (boost::regex_search(text, damage, CriticalHit)) {
    for (int i = 0; i < damage.size(); i++) {
        HL_LOG_ERR("%s\n", damage[i]);
    }
}


这将从<c=#...部分开始输出各种字符串。 damage[0]给出整个字符串,damage[1]给出从捕获组开始,然后是字符串的其余部分。

整个字符串看起来像“您严重击中<c=#399999>5,992</c>

我究竟做错了什么?

最佳答案

这里没有人知道HI_LOG_ERROR的作用。使用标准流和插入器。作为猜测,如果%s是C样式格式字符串的一部分,则必须将damage[i]转换为C样式字符串。 damage[i]sub_match对象,本质上是两个迭代器。要将其转换为C样式的字符串,请首先使用其转换运算符获取C ++字符串,然后使用.c_str()获取C字符串:

HI_LOG_ERROR("%s\n", std::string(damage[i]).c_str());

07-24 13:52