需要使用带有wstring的regex_replace协助

时间:2015-11-09 00:58:13

标签: c++ stl

我想使用regex_replace,就像使用string / c-string(3)版本链接到此处的示例一样:http://www.cplusplus.com/reference/regex/regex_replace/

问题是我不了解模板和正则表达式类,以便在每个示例中使用regex_replace,但是使用宽字符串。我看到了wregex,但我没有看到我如何使用它。

我的想法是取一个字符串regex_ {13E008E3-EEE7-4AC3-B9F1-E353DB67EDFD}并将其变为status_ {13E008E3-EEE7-4AC3-B9F1-E353DB67EDFD}

wstring statusDataName;
wstring key              = wstring(L"regex_");
wstring repl             = wstring(L"status_");
TCHAR dataName[MAX_STR]  = {0};
statusDataName = regex_replace(wstring(dataName), key,  repl);
  

错误C2784:   “的std :: basic_string的< _Elem,性病:: char_traits< _Elem>,的std ::分配器< _其他>>   std :: regex_replace(const _Elem *,const   的std :: basic_regex< _Elem,_RxTraits> &,const _Elem   *,std :: regex_constants :: match_flag_type)':无法推断'const _Elem *'的模板参数   '的std :: basic_string的,性病::分配器>'   错误C2784:   “的std :: basic_string的< _Elem,性病:: char_traits< _Elem>,的std ::分配器< _其他>>   std :: regex_replace(const _Elem *,const   的std :: basic_regex< _Elem,_RxTraits> &安培;,const的   的std :: basic_string的< _Elem,_Traits1,_Alloc1>   &,std :: regex_constants :: match_flag_type)':无法推断出模板   来自'const _Elem *'的参数   '的std :: basic_string的,性病::分配器>'   错误C2784:'std :: basic_string< _Elem,_Traits1,_Alloc1>   std :: regex_replace(const std :: basic_string< _Elem,_Traits1,_Alloc1>   &,const std :: basic_regex< _Elem,_RxTraits> &,const _Elem   *,std :: regex_constants :: match_flag_type)':无法推断'const std :: basic_regex< _Elem,_RxTraits>的模板参数&安培;”从   'std :: wstring'错误C2784:'std :: basic_string< _Elem,_Traits1,_Alloc1>   std :: regex_replace(const std :: basic_string< _Elem,_Traits1,_Alloc1>   &,const std :: basic_regex< _Elem,_RxTraits> &安培;,const的   的std :: basic_string的< _Elem,_Traits2,_Alloc2>   &,std :: regex_constants :: match_flag_type)':无法推断出模板   'const std :: basic_regex< _Elem,_RxTraits>的参数&安培;”从   'std :: wstring'错误C2780:'_ _OutIt   的std :: regex_replace(_OutIt,_BidIt,_BidIt,常量   的std :: basic_regex< _Elem,_RxTraits> &,const _Elem   *,std :: regex_constants :: match_flag_type)':需要6个参数 - 3个提供错误C2780:'_ OutTy * std :: regex_replace(_OutTy   (&)[_ OutSize],_ BidIt,_BidIt,const std :: basic_regex< _Elem,_RxTraits>   &,const std :: basic_string< _Elem,_Traits,_Alloc>   &,std :: regex_constants :: match_flag_type)':预计6个参数 - 3   提供错误C2780:'_OutIt   的std :: regex_replace(_OutIt,_BidIt,_BidIt,常量   的std :: basic_regex< _Elem,_RxTraits> &安培;,const的   的std :: basic_string的< _Elem,_Traits,_Alloc>   &,std :: regex_constants :: match_flag_type)':预计6个参数 - 3   提供

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:9)

工作变体:

#include <string>
#include <regex>
#include <iostream>

using std::wstring;

int main()
{
    wstring dataName = L"regex_{13E008E3-EEE7-4AC3-B9F1-E353DB67EDFD} ";

    wstring key              = wstring(L"regex_");
    wstring repl             = wstring(L"status_");
    wstring statusDataName = std::regex_replace(dataName, std::wregex(key),  repl);
    std::wcout << statusDataName << L"\n";
}