本人C++新手,搞正则搞了一天。。试了各种方法。C 的正则 C++正则 boost正则。 真是头都大了。
匹配中文内容一直乱码,最后功夫不负有心人,让我整理出来了方法。这里写出来给大家分享。
高手勿喷。
std::string getvalue(char *regstr,char *str)
{
wchar_t *regexstr=AnsiToUnicode(regstr);
std::string sToMatch=str;
setlocale( LC_CTYPE, "" );
int iWLen= mbstowcs( NULL, sToMatch.c_str(), sToMatch.length() );
wchar_t *lpwsz= new wchar_t[iWLen+1];
int i1= mbstowcs( lpwsz, sToMatch.c_str(), sToMatch.length() );
std::wstring wsToMatch(lpwsz);
delete []lpwsz;
boost::wregex wrg(regexstr);
boost::wsmatch wsm;
boost::regex_match( wsToMatch, wsm, wrg );
int iLen= wcstombs( NULL, wsm[1].str().c_str(),0);
char *lpsz= new char[iLen+1];
int i= wcstombs( lpsz, wsm[1].str().c_str(), iLen );
//lpsz[iLen] = ‘/0’;
std::string retstr(lpsz);
delete []lpsz;
return retstr;
}
//将单字节char*转化为宽字节wchar_t*
wchar_t* AnsiToUnicode( const char* szStr )
{
int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 );
if (nLen == 0)
{
return NULL;
}
wchar_t* pResult = new wchar_t[nLen];
MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen );
return pResult;
}