Диапазон символов UTF-8 в C ++ 11 Regex

Этот вопрос является продолжениемРаботают ли регулярные выражения C ++ 11 со строками UTF-8?

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

Программа составлена на Mac Mountain Lion сclang++ со следующими параметрами:

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

Код выше работает. Это стандартное регулярное выражение"[一-龠々〆ヵヶ]" для соответствия любому японскому кандзи или китайскому символу. Это работает в Javascript и Ruby, но я не могу заставить работать диапазоны в C ++ 11, даже с использованием аналогичной версии[\u4E00-\u9fa0], Код ниже не соответствует строке.

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

Смена локали тоже не помогла. Есть идеи?

РЕДАКТИРОВАТЬ

Итак, я обнаружил, что все диапазоны работают, если вы добавите+ к концу. В этом случае[一-龠々〆ヵヶ]+, но если вы добавите{1} [一-龠々〆ヵヶ]{1} это не работает. Более того, кажется, что он выходит за границы. Это не будет соответствовать латинским символам, но это будет соответствовать который\u306f а также который\u3041, Они оба лежат ниже\u4E00

nhahtdh также предложил regex_search, который также работает без добавления+ но он все еще сталкивается с той же проблемой, что и выше, вытягивая значения за пределы своего диапазона. Немного поиграл с локалями. Марк Рэнсом предполагает, что он рассматривает строку UTF-8 как тупой набор байтов, я думаю, что это, возможно, то, что он делает.

Продолжая выдвигать теорию о том, что UTF-8 перемешивается,[a-z]{1} а также[a-z]+ Спичкиa, но только[一-龠々〆ヵヶ]+ соответствует любому из символов, а не[一-龠々〆ヵヶ]{1}.

Ответы на вопрос(1)

Ваш ответ на вопрос