我使用下面的代码尝试使用正则表达式匹配符号(例如,我尝试匹配圆形星号,http://graphemica.com/%E2%9C%AA)
#include <boost/regex.hpp>
//...
std::wstring text = L"a✪c";
auto re = L"(\\p{S}|\\p{L})+?";
boost::wregex r(re);
boost::regex_token_iterator<std::wstring::const_iterator>
i(boost::make_regex_token_iterator(text, r, 1)), j;
while (i != j)
{
std::wstring x = *i;
++i;
}
//...
text
的字节值为{97, 10026, 99}
,(或“{0x61,0x272A,0x63}”)。
所以这是一个有效的符号。
代码与2个字母'a'
0x61
和'c'``0x63
匹配,但不匹配符号✪
(0x272A
)。
我用其他几个符号尝试了它,但没有一个符号可用,(例如)。
我在这里缺少什么?
答案 0 :(得分:2)
使用boost::wregex
时,Boost.Regex文档明确指出there's no support for Unicode-specific character classes。
如果您需要此功能,则需要build Boost.Regex with ICU support启用,然后使用boost::u32regex
类型而不是boost::wregex
。