正则表达式搜索匹配不使用组
Posted
技术标签:
【中文标题】正则表达式搜索匹配不使用组【英文标题】:regex search matches not using group 【发布时间】:2016-02-13 07:53:32 【问题描述】:有如下代码:
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]
从捕获组开始,然后是字符串的其余部分。
整个字符串看起来像“You critical hit for <c=#399999>5,992</c>
”
我做错了什么?
【问题讨论】:
我们不知道您要匹配什么...这是第一件事错了。 对不起,我正在尝试匹配 5992。lll 编辑 所以正在删除我的格式 使用.+?
或.*?
并没有什么不同。还尝试使用 match[0].first 和 match[0].second 等,但从未得到正确的结果
@sk099 “btsyaaa”到底是从哪里来的?
【参考方案1】:
这里没有人知道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());
【讨论】:
这就是解决方案。我一生都无法弄清楚为什么没有打印捕获组。把我的头撞在桌子上感觉像 4-5 个小时,只是想不通,所以谢谢伙计。HL_LOG_ERR
只是输出到具有printf
样式格式的控制台。以上是关于正则表达式搜索匹配不使用组的主要内容,如果未能解决你的问题,请参考以下文章