正则表达式搜索匹配不使用组

时间:2016-02-13 07:53:32

标签: c++ regex boost

拥有以下代码:

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>”而严重命中

我做错了什么?

1 个答案:

答案 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());
相关问题