Boost 语言环境不能与 std::regex 一起使用

时间:2021-05-24 14:58:07

标签: c++ regex boost locale

Boost.Locale 似乎不能与 std::regex 一起使用。看下面的代码:

#include <regex>
#include <boost/locale.hpp>

int main()
{
    try {
        boost::locale::generator gen;
        std::locale de_DE(gen("de_DE.UTF-8"));
        std::wstring in(L"Grün GRÜN grün");

        std::wregex rx;
        rx.imbue(de_DE);
        rx.assign(L"grün", std::regex::icase);

        std::wcout << std::regex_replace(in, rx, L"green") << L"\n";
    }
    catch (std::exception &e) {
        std::cout << "Exception: " << e.what() << "\n";
    }
}

输出:

green GRÜN green

然而这个:

#include <regex>
#include <locale>

int main()
{
    try {
        std::locale de_DE("de_DE.UTF-8");
        std::wstring in(L"Grün GRÜN grün");

        std::wregex rx;
        rx.imbue(de_DE);
        rx.assign(L"grün", std::regex::icase);

        std::wcout << std::regex_replace(in, rx, L"green") << L"\n";
    }
    catch (std::exception &e) {
        std::cout << "Exception: " << e.what() << "\n";
    }
}

正确输出:

green green green

在 Ubuntu 20.04.2 上测试。 g++ 10.2,Boost.Locale 使用 vcpkg(因此是静态链接)在 ICU 支持下构建。

0 个答案:

没有答案
相关问题