Общие символы '\p{S}' не были "сопоставлены" с помощью boost wregex

Я использую приведенный ниже код, чтобы попытаться сопоставить символы с помощью регулярных выражений (например, я пытаюсь сопоставить символ звездочки круга, 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 ответ

Решение

В документации Boost.Regex прямо указано, что при использовании Unicode-классов классов не поддерживается boost::wregex,

Если вы хотите эту функциональность, вам нужно собрать Boost.Regex с включенной поддержкой ICU, а затем использовать boost::u32regex тип вместо boost::wregex,

Другие вопросы по тегам