具有以下代码:
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());