如何在std :: sub_match中访问正则表达式搜索结果?

问题描述

std::smatch ipv4Match;
std::regex_match(ipv4,ipv4Match,ip);

if (ipv4Match.empty())
{
    return std::nullopt;
}
else
{
    if (!ipv4Match.empty())
    {
        uint8_t a,b,c,d;
        a = (uint8_t)(ipv4Match[0]);
        b = (uint8_t)(ipv4Match[1]);
        c = (uint8_t)(ipv4Match[2]);
        d = (uint8_t)(ipv4Match[3]);
   }
}

但是显然不起作用。我已经研究过,当我使用smatch访问[]时,它返回一个sub_match,除非构造函数,否则它没有公共成员。

如何将IP地址匹配的每个部分转换为一个字节?

最重要的是,如果std::cout << ipv4Match[0]ipv4Match,而无法访问sub_match内的内部字符串,怎么办?

解决方法

您的问题与正则表达式无关,但字符串转换为int。

您可以使用std::atoi / std::stoi

uint8_t a = std::stoi(ipv4Match[1].str());
uint8_t b = std::stoi(ipv4Match[2].str());
uint8_t c = std::stoi(ipv4Match[3].str());
uint8_t d = std::stoi(ipv4Match[4].str());

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...