Rango de caracteres UTF-8 en C ++ 11 Regex
Esta pregunta es una extensión de¿Las expresiones regulares de C ++ 11 funcionan con cadenas UTF-8?
#include <regex>
if (std::regex_match ("中", std::regex("中") )) // "\u4e2d" also works
std::cout << "matched\n";
El programa está compilado en Mac Mountain Lion conclang++
con las siguientes opciones:
clang++ -std=c++0x -stdlib=libc++
El código anterior funciona. Este es un regex de rango estándar."[一-龠々〆ヵヶ]"
para emparejar cualquier kanji japonés o carácter chino. Funciona en Javascript y Ruby, pero parece que no consigo que los rangos funcionen en C ++ 11, incluso con una versión similar.[\u4E00-\u9fa0]
. El siguiente código no coincide con la cadena.
if (std::regex_match ("中", std::regex("[一-龠々〆ヵヶ]")))
std::cout << "range matched\n";
Cambiar la configuración regional tampoco ha ayudado. ¿Algunas ideas?
EDITARAsí que he encontrado que todos los rangos funcionan si agrega un+
hasta el final. En este caso[一-龠々〆ヵヶ]+
, pero si añades{1}
[一-龠々〆ヵヶ]{1}
No funciona. Además, parece sobrepasar sus límites. No coincidirá con los caracteres latinos, pero sí coincidiráは
cual es\u306f
yぁ
cual es\u3041
. Ambos se encuentran debajo\u4E00
nhahtdh también sugirió regex_search que también funciona sin agregar+
pero sigue teniendo el mismo problema que el anterior al extraer valores fuera de su rango. Jugó con los locales un poco también. Mark Ransom sugiere que trata la cadena UTF-8 como un conjunto de bytes tontos, creo que esto es posiblemente lo que está haciendo.
Continuando con la teoría de que UTF-8 se está mezclando de alguna manera,[a-z]{1}
y[a-z]+
partidosa
, pero sólo[一-龠々〆ヵヶ]+
coincide con cualquiera de los personajes, no[一-龠々〆ヵヶ]{1}
.