Я использую следующий код, чтобы попытаться сопоставить символы с помощью regex (например, я пытаюсь совместить символ звезды круга, http://graphemica.com/%E2%9C%AA)Общие символы ' p {S}' не были сопоставлены с использованием boost wregex
#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
). Я пробовал это с несколькими другими символами, и никто из них не работает (например, ©).
Что мне здесь не хватает?
Интересно, что '' и '' '' принадлежат '\ p {So }' категории. Что делать, если вы просто используете '\\ p {So}' или 'auto re = L" [\\ p {So} \\ p {S} \\ p {L}] ";'? (Ваш '+?' Является избыточным, если вы хотите совместить 1 символ за раз). –
Кажется, что это не работает, я получаю следующую ошибку: 'Escape sequence не было ни действительным, ни допустимым именем класса символов. Ошибка при анализе регулярного выражения: '(\ p {So} >>> ЗДЕСЬ >>>)'. ' – FFMG