2010-05-07 12 views
16

¿Hay una diferencia entre ^[a-zA-Z] y [^a-zA-Z]?Expresión regular "^ [a-zA-Z]" o "[^ a-zA-Z]"

Cuando compruebo en C#,

Regex.IsMatch("t", "^[a-zA-Z]") // Returns true (I think it's correct) 

Regex.IsMatch("t", "[^a-zA-Z]") // Returns false 

Hay una gran cantidad de sitios web que utilizan [^a-zA-Z] para el alfabeto. No estoy seguro de cuál es la respuesta correcta.

+0

Muchas gracias por sus respuestas. Puedo ver claramente ahora. – Win

+9

¡Me alegra que la lluvia haya desaparecido! – tloflin

+2

BTW, C# no tiene expresiones regulares. El .NET Framework sí. –

Respuesta

55

Sí, la primera significa "hacer coincidir todas las cadenas que comienzan con una letra", la segunda significa "hacer coincidir todas las cadenas que contienen una letra que no sea". El símbolo de intercalación ("^") se usa de dos maneras diferentes, una para indicar el comienzo del texto, una para anular una coincidencia de caracteres entre corchetes.

+1

+1 lo mejor de ambos mundos: conciso Y correcto. – Dathan

5

Hay una diferencia.

Cuando el carácter ^ aparece fuera de [] coincide con el comienzo de la línea (o cadena). Cuando aparece el carácter ^ dentro del [], coincide con cualquier carácter que no aparezca dentro del [].

9

^[a-zA-Z] significa cualquier az o AZ en el inicio de una línea

[^a-zA-Z] significa cualquier carácter que no sea az o AZ

3

^fuera de la clase de caracteres ("[a-zA-Z]") observa que es el operador "comienza con".
^ dentro del carácter niega la clase especificada.

Entonces, "^ [a-zA-Z]" se traduce como "comienza con carácter de az o AZ", y "[^ a-zA-Z]" se traduce a "no es ni az ni AZ"

Aquí hay una referencia rápida: http://www.regular-expressions.info/reference.html