这两天做一个全球化的脏话过滤功能, 因此想到使用正则表达式.
我们使用的工作编译环境为gcc4.8.5, 和boost1.61, 以自己以前使用boost::regex的经验并google的结果发现gcc对boost::regex的支持至少要到gcc4.8.1.
如果选用C++11的regex, 则需要gcc的版本为>4.9.0gcc4.9.0...和regex-match
同时, 除了中文, 可能还会有其它的宽字符语言, 比如日语,越南语,韩语==, 其实这个是个将自己引出歧途浪费好多时间的认知, 因为花了好多时间去了解Unicode和宽字节...
还好今天用在线的编译工具测试中文和越南语匹配成功, 我想接下来我只要大概修改我的代码问题就会解决!
另外花多时间的地方是把问题想的过于复杂, 从一开始就不应该分什么宽字符和窄字符, 并应该先用在线的编译器先行实验测试数据, 如果算法合适, 再在自己的项目中使用, 以避免大量的时间浪费在了巨大的C++编译时间上和算法本身的调试上.
最终的测试代码如下:
#include <iostream>
#include <string>
#include <boost/regex.hpp>
using namespace std;
using namespace boost;
int main()
{
string str = "今天是个好日子圣达菲阿斯qweermao đông";
std::cout << str << std::endl;
boost::regex pattern("(好|qwee|今天|mao đông)");
boost::sregex_token_iterator end; //需要注意一下这里
for (boost::sregex_token_iterator j(str.begin(), str.end(), pattern); j != end; ++j){
cout << *j << ",";
}
return 0;
}