如何在 C++ 中使用正则表达式将十六进制颜色字符串转换为 RGB

How to convert hex color string to RGB using regex in C++

如何使用正则表达式将十六进制颜色字符串转换为 RGB?

我正在使用正则表达式,但它不起作用。我不熟悉正则表达式。方法正确吗?

下面是示例代码:

int main()
{
    std::string l_strHexValue = "#FF0000";

    std::regex pattern("#?([0-9a-fA-F]{2}){3}");

    std::smatch match;
    if (std::regex_match(l_strHexValue, match, pattern))
    {
        auto r = (uint8_t)std::stoi(match[1].str(), nullptr, 16);
        auto g = (uint8_t)std::stoi(match[2].str(), nullptr, 16);
        auto b = (uint8_t)std::stoi(match[3].str(), nullptr, 16);
    }

    return 0;
}

你可以使用

std::regex pattern("#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})");

此处,FF0000 被捕获到一个单独的组中。

或者,您可以使用稍微不同的方法。

std::string l_strHexValue = "#FF0000";
std::regex pattern("#([0-9a-fA-F]{6})");
std::smatch match;
if (std::regex_match(l_strHexValue, match, pattern))
{
    int r, g, b;
    sscanf(match.str(1).c_str(), "%2x%2x%2x", &r, &g, &b);
    std::cout << "R: " << r << ", G: " << g << ", B: " << b << "\n";
}
// => R: 255, G: 0, B: 0

参见C++ demo