Zakres postaci UTF-8 w C ++ 11 Regex

To pytanie jest rozszerzeniemCzy wyrażenia regularne C ++ 11 działają z ciągami UTF-8?

#include <regex>  
if (std::regex_match ("中", std::regex("中") ))  // "\u4e2d" also works
  std::cout << "matched\n";

Program jest kompilowany na Mac Mountain Lion zclang++ z następującymi opcjami:

clang++ -std=c++0x -stdlib=libc++

Powyższy kod działa. Jest to standardowe wyrażenie regularne"[一-龠々〆ヵヶ]" za dopasowanie dowolnego japońskiego kanji lub chińskiego znaku. Działa w JavaScript i Ruby, ale nie wydaje mi się, aby zakresy działały w C ++ 11, nawet przy użyciu podobnej wersji[\u4E00-\u9fa0]. Poniższy kod nie pasuje do łańcucha.

if (std::regex_match ("中", std::regex("[一-龠々〆ヵヶ]")))
  std::cout << "range matched\n";

Zmiana ustawień regionalnych również nie pomogła. Jakieś pomysły?

EDYTOWAĆ

Odkryłem więc, że wszystkie zakresy działają, jeśli dodasz a+ do końca. W tym przypadku[一-龠々〆ヵヶ]+, ale jeśli dodasz{1} [一-龠々〆ヵヶ]{1} to nie działa. Co więcej, wydaje się, że przekracza swoje granice. Nie pasuje do znaków łacińskich, ale pasuje który jest\u306f i który jest\u3041. Oboje leżą poniżej\u4E00

nhahtdh zasugerował również regex_search, które działa również bez dodawania+ ale nadal napotyka ten sam problem, co powyżej, ciągnąc wartości spoza swojego zakresu. Grałem też trochę z lokacjami. Mark Ransom sugeruje, że traktuje łańcuch UTF-8 jako głupi zestaw bajtów, myślę, że to prawdopodobnie robi.

Dalsze naciskanie na teorię, że UTF-8 się pomieszało, jak,[a-z]{1} i[a-z]+ meczea, lecz tylko[一-龠々〆ヵヶ]+ pasuje do żadnego z znaków, nie[一-龠々〆ヵヶ]{1}.

questionAnswers(1)

yourAnswerToTheQuestion