Nic*_*las 6 c++ regex boost internationalization
我试图" "
使用Boost 替换字符串中的每个非alpha字符:
std::string sanitize(std::string &str)
{
boost::regex re;
re.imbue(std::locale("fr_FR.UTF-8"));
re.assign("[^[:alpha:]]");
str = boost::regex_replace(str, re, " ");
return str;
}
int main ()
{
std::string test = "(ça) /.2424,@ va très bien ?";
cout << sanitize(test) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果是,a va tr s bien
但我想得到ça va très bien
.
我错过了什么?
boost::regex::imbue
不会做你想要的东西 - 特别是,它不会使boost :: regex与UTF-8一起工作.(你也许可以让它以这种方式工作与ISO 8859-1或类似的单字节字符编码,但似乎并没有被你想要的这里).
对于UTF-8支持,您将需要使用一个处理Unicode的boost :: regex类 - 请参阅http://www.boost.org/doc/libs/1_55_0/libs/regex/doc/html/ boost_regex/unicode.html.
这是一些我认为你想做的代码:
#include <string>
#include <boost/regex/icu.hpp>
std::string sanitize(std::string &str)
{
boost::u32regex re = boost::make_u32regex("[^[:alpha:]]");
str = boost::u32regex_replace(str, re, " ");
return str;
}
int main ()
{
std::string test = "(ça) /.2424,@ va très bien ?";
std::cout << test << "\n" << sanitize(test) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
966 次 |
最近记录: |