Общие символы '\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
,