UTF-8-Zeichenbereich in C ++ 11 Regex

Diese Frage ist eine Erweiterung vonFunktionieren reguläre C ++ 11-Ausdrücke mit UTF-8-Zeichenfolgen?

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

Das Programm wird auf Mac Mountain Lion mit kompiliertclang++ mit folgenden Optionen:

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

Der obige Code funktioniert. Dies ist ein regulärer Standardbereich"[一-龠々〆ヵヶ]" für das Zusammenbringen irgendeines japanischen Kanji oder chinesischen Schriftzeichens. Es funktioniert in Javascript und Ruby, aber ich kann scheinbar keine Bereiche in C ++ 11 zum Laufen bringen, selbst wenn ich eine ähnliche Version verwende[\u4E00-\u9fa0]. Der folgende Code stimmt nicht mit der Zeichenfolge überein.

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

Das Ändern des Gebietsschemas hat auch nicht geholfen. Irgendwelche Ideen?

BEARBEITEN

Also habe ich festgestellt, dass alle Bereiche funktionieren, wenn Sie eine hinzufügen+ bis zum Ende. In diesem Fall[一-龠々〆ヵヶ]+, aber wenn Sie hinzufügen{1} [一-龠々〆ヵヶ]{1} es funktioniert nicht. Darüber hinaus scheint es seine Grenzen zu überschreiten. Es stimmt nicht mit lateinischen Zeichen überein, aber es stimmt überein welches ist\u306f und welches ist\u3041. Sie liegen beide unten\u4E00

nhahtdh schlug auch regex_search vor, was auch ohne Hinzufügen funktioniert+ Es tritt jedoch immer noch das gleiche Problem wie oben auf, indem Werte außerhalb seines Bereichs gezogen werden. Spielte auch ein bisschen mit den Locales. Mark Ransom schlägt vor, die UTF-8-Zeichenfolge als eine dumme Menge von Bytes zu behandeln. Ich denke, dies ist möglicherweise das, was sie tut.

Die Theorie, dass UTF-8 in gewisser Weise durcheinander gerät, wird weiter vorangetrieben.[a-z]{1} und[a-z]+ Streichhölzera, aber nur[一-龠々〆ヵヶ]+ stimmt mit keinem der Zeichen überein, nicht mit[一-龠々〆ヵヶ]{1}.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage