如何使用正则表达式删除 std::wstring 中特定短语的所有实例?

How to use Regular Expressions to remove all instances of a specific phrase in an std::wstring?

我正在尝试遵循此答案:,但 std::wstring。到目前为止,我有这个:

std::wstring str = L"hello hi hello hi hello hi";
std::wregex remove = L"hi";

现在我想这样做:regex_replace(str,remove,""); 不过看起来 regex_replace 对 wstring 不起作用。如何删除此字符串的所有实例?

std::regex_replace 当然适用于 std::wstring,以及 std::basic_string 的所有其他特化。但是,替换格式字符串的字符类型必须与正则表达式和输入字符串的字符类型相匹配。这意味着您需要一个广泛的替换格式字符串:

std::regex_replace(str, remove, L"");

除此之外,std::wregex 的构造函数采用 const wchar_t* 是显式的,因此您的复制初始化将不起作用。此外,这种 std::regex_replace returns 的重载是一个新字符串,已完成替换而不是就地替换,这是需要注意的事情。

这里 example 考虑了以下几点:

std::wstring str = L"hello hi hello hi hello hi";
std::wregex remove{L"hi"};   

str = std::regex_replace(str, remove, L"");