2010-11-24 12 views
10

¿Qué constituye un nombre de grupo válido?C# Regex: ¿Caracteres válidos del grupo nombrado?

var re = new Regex(@"(?<what-letters-can-go-here>pattern)"); 
+0

es una buena pregunta. Asumo que tu pregunta se dirige hacia saber si tienes la capacidad de usar caracteres que no sean letras y dígitos. Tengo curiosidad por saber por qué quieres más que eso? – BeemerGuy

+0

Estoy empezando a pensar que son solo caracteres de palabras ... '\ w +'. – mpen

+0

@BeemerGuy: No necesito más que eso, pero estoy tratando de revertir una expresión regular como lo hace Django (dada una expresión regular, devuelva algo que coincida con ella). Así que estoy usando expresiones regulares para que coincidan con las expresiones regulares>. <¡Es horrible! – mpen

Respuesta

1

respuesta Corto

Los caracteres permitidos son [a-zA-Z0-9_]

respuesta Largo

De acuerdo con la Microsoft docs:

nombre no debe contener caracteres de puntuación y no puede comenzar con un número.

Pero eso no es muy específica, por lo que vamos a ver el código fuente:

El source code for the class System.Text.RegularExpressions.RegexParser nos muestra que los caracteres permitidos son esencialmente [a-zA-Z0-9_]. Para ser realmente precisa, sin embargo, no es este comentario en el método que se utiliza para comprobar si el personaje tiene una validez de un nombre de grupo de captura:

internal static bool IsWordChar(char ch) { 
     // According to UTS#18 Unicode Regular Expressions (http://www.unicode.org/reports/tr18/) 
     // RL 1.4 Simple Word Boundaries The class of <word_character> includes all Alphabetic 
     // values from the Unicode character database, from UnicodeData.txt [UData], plus the U+200C 
     // ZERO WIDTH NON-JOINER and U+200D ZERO WIDTH JOINER. 
     return CharInClass(ch, WordClass) || ch == ZeroWidthJoiner || ch == ZeroWidthNonJoiner; 
    } 

Y si desea probar por ti mismo, this .NET fiddle confirma que hay muchos caracteres de no puntuación que no están permitidos en el nombre de un grupo de captura:

+0

"esencialmente' [a-zA-Z0-9_] '" está bastante lejos de la realidad. 'WordClass' es mucho más grande que eso, además de que tienes los dos caracteres de ancho cero. Pero tu código sí lo muestra, ¡así que gracias! Finalmente una respuesta definitiva. – mpen

4

Cualquier cosa igualada por \w que es efectivamente [a-zA-Z0-9_]

No obstante

confirmado ..

+2

¿Cuál es su fuente? – mpen

+0

'\ w' parece estar cerca pero' -' (dash) no coincide con '\ w' pero es un caracter de nombre de grupo válido. –

+1

@Ahmad, un '-' no es válido, se usa para definir un grupo de equilibrio. –

Cuestiones relacionadas