常见符号'\ p {S}'未使用boost wregex'匹配'

时间:2016-07-22 11:17:50

标签: c++ regex boost boost-regex

我使用下面的代码尝试使用正则表达式匹配符号(例如,我尝试匹配圆形星号,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)。 我用其他几个符号尝试了它,但没有一个符号可用,(例如)。

我在这里缺少什么?

1 个答案:

答案 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