拥有以下代码:
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>
”而严重命中
我做错了什么?
答案 0 :(得分:2)
此处没有人知道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());