Les symboles communs ‘\ p {S}’ n’ont pas été mis en correspondance avec boost wregex

J’utilise le code ci-dessous pour essayer de faire correspondre les symboles à l’aide de regex (par exemple, j’essaie de faire correspondre le symbole de l’écanvas circulaire, http://graphemica.com/%E2%9C%AA )

#include  //... std::wssortingng text = L"a✪c"; auto re = L"(\\p{S}|\\p{L})+?"; boost::wregex r(re); boost::regex_token_iterator i(boost::make_regex_token_iterator(text, r, 1)), j; while (i != j) { std::wssortingng x = *i; ++i; } //... 

La valeur en octets du text est {97, 10026, 99} , ou {{0x61,0x272A, 0x63} ‘). C’est donc un symbole valide.

Le code correspond aux 2 lettres, 'a' 0x61 et 'c'``0x63 , mais pas au symbole ( 0x272A ). Je l’ai essayé avec quelques autres symboles et aucun d’entre eux ne fonctionne (© par exemple).

Qu’est-ce que j’oublie ici?

La documentation de Boost.Regex indique explicitement que l’ utilisation de boost::wregex n’est pas prise en charge pour les classes de caractères spécifiques à Unicode .

Si vous souhaitez cette fonctionnalité, vous devez créer Boost.Regex avec le support ICU activé, puis utiliser le type boost::u32regex au lieu de boost::wregex .