aug*_*tin 12 c++ regex format boost
想象一下,我有以下字符串:
"I'll have some %1%, some %42% and maybe some %5% as well."
Run Code Online (Sandbox Code Playgroud)
基本上,我有兴趣知道模式%(整数)%之后的最大整数值.
我甚至不确定是否可以使用正则表达式.我可以使用什么正则表达式,以便在上面的例子中答案是42?
PS一个简单的解决方案显然是简单地查找任何%(整数)%模式,并使用脚本(c ++代码)迭代所有匹配并找到最高值.我的问题是:是否可以在正则表达式中立即执行此操作?
背景:理解下面的内容可能没有必要回答这个问题,但我想你们中的一些人可能想知道.
基本上我使用的是C++和boost :: format.格式用这样的占位符构图:%1%,%2%等.如果提供的变量数与格式本身的最大整数值不对应,Boost :: format会抛出异常.我将使用的格式由(受信任的)用户(网站管理员)提供.不过,为了正确地做事,我需要验证模式.因此,我需要在模式中找到最大整数,以确保在运行时不会抛出异常.
如果您使用带有用户提供格式的boost :: format,您是如何处理此问题的?
顺便说一句,没有boost-format标签!(虽然还有其他的boost-foo标签).
解
Billy ONeal提供了正确的答案,Beh Tou Cheh(在所选答案的评论中)非常友好地粘贴了实际的代码:
#include <iostream>
#include <string>
#include <deque>
#include "strtk.hpp"
int main()
{
std::string s = "I'll have some %1%, some %42% and maybe some %5% as well.";
std::deque<int> int_list;
strtk::split_regex("%([\\d]+)%",
s,
strtk::range_to_type_back_inserter(int_list),
strtk::match_mode::match_1);
if (!int_list.empty())
{
std::cout << "max: " << strtk::max_of_cont(int_list) << std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Bil*_*eal 11
找到这样的所有值:%([\d]+)%,将后引用解析为整数(使用类似的东西lexical_cast),然后选择最高值.(你可以用这样的东西std::max_element)
| 归档时间: |
|
| 查看次数: |
1581 次 |
| 最近记录: |