Regex.IsMatch("foo", "[\U00010000-\U0010FFFF]")
Throws: System.ArgumentException: análisis "[-]" - [x-y] rango en orden inverso.C# Expresiones regulares con caracteres Uxxxxxxxx en el patrón
Al mirar los valores hexadecimales para \ U00010000 y \ U0010FFF obtengo: 0xd800 0xdc00 para el primer carácter y 0xdbff 0xdfff para el segundo.
Así que supongo que realmente tengo un problema. ¿Por qué los caracteres Unicode formados con \ U se dividen en dos caracteres en la cadena?
En realidad, tienes razón. Por lo que he encontrado, \ u solo admite 4 dígitos hexadecimales (exactamente 4, no más, no menos), \ uFFFF es el máximo. He eliminado mi "solución" porque, aunque no produce un error, no parece ser una expresión regular de Unicode válida. Sigo creyendo que el \ necesita ser escapado. –
Sin @, necesitaría escapar \ if \ UFFFF para la sintaxis de expresiones regulares (como \ d para [0-9]), pero en su lugar es una sintaxis literal de cadenas (como \ n para el carácter de nueva línea). –
Esto es desafortunado: muchos emojis modernos se incluyen en esta categoría. – damian