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

时间:2015-12-04 04:25:53

标签: c++ regex string replace std

我正在尝试遵循这个答案:https://stackoverflow.com/a/32435076/5484426,但是对于std :: wstring。到目前为止,我有这个:

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

现在我想这样做:regex_replace(str,remove,""); 虽然regex_replace不适用于wstring,但它看起来并不像。如何删除此字符串的所有实例?

1 个答案:

答案 0 :(得分:5)

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

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

除此之外,std::wregex的{​​{1}}的构造函数是显式的,因此您的复制初始化将不起作用。此外,const wchar_t*的这个重载会返回一个新的字符串,其中包含已完成的替换,而不是将它们放在适当的位置,这是需要注意的事项。

以下是考虑了以下几点的example

std::regex_replace