楼主在近期遇到一个小需求,需要从版本号字符串“a.b.c.d”中获取a、b、c、d,代码内容如下:
std::string version = "1.1.1.4";
std::regex pattern(R"(^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$)");
\\R的作用是原始字符串字面量,告诉编译器括号内的内容应按字面意义解析,如果没有的话,需要\\d与\\.
\\0|[1-9]\d*作用是检查0或1-9的所有数字,支持0、12等数字,不支持01、012等数字
\\^与$标志着正则表达式的开始与结束
std::smatch matches;
std::vector<uint32_t> version_num;
if(std::regex_match(version, matches, pattern))
{
for(uint idx = 0; idx < matches.size(); ++idx)
{
\\std::regex_match处理后得到的matches还是字符串,需要转为uint32_t使用
std::stringstream ss(matches[idx].str());
uint32_t num;
ss >> num;
version_num.push_back(num);
}
}