首页 > 解决方案 > C++ 正则表达式搜索特定的中文模式

问题描述

我需要从 C++ 字符串中正则表达式搜索特定的中文模式 例如,我有一个源字符串“什么手机好”和一个模式“什么(。*)好”;

我使用 boost::regex_search 和 wstring 来做这个,但是当搜索字符串有英文或数字时会出现问题,代码不起作用,例如,源字符串是“abc什么efg手机好”模式是“什么(.*)好”,代码做ACT2。而源字符串是""(空字符串)模式是"什么(.*)好",代码做ACT1

我想知道如何解决它。

功能

std::wstring string2wstring(const std::string& s) {
     setlocale(LC_CTYPE, "");
     int iWLen = std::mbstowcs(NULL, s.c_str(), s.length());
     wchar_t *lpwsz= new wchar_t[iWLen + 1];
     std::mbstowcs(lpwsz, s.c_str(), s.length());
     std::wstring wstrResult(lpwsz);
     delete []lpwsz;
     return wstrResult;
}

std::wstring ws = string2wstring(s);
boost::wregex wpattern(string2wstring(pattern));
if (boost::regex_search(ws, wpattern) == true) {
   do ACT1;
} else {
   do ACT2;
}

标签: c++regexwstring

解决方案


尴尬的是我不需要使用 wstring 来处理中文正则表达式。

只需进行查询和模式 gbk-string 即可修复它。

boost::regex_search(query,pattern)

推荐阅读