2010-05-07 18 views
16

C'è una differenza tra ^[a-zA-Z] e [^a-zA-Z]?Espressione regolare "^ [a-zA-Z]" o "[^ a-zA-Z]"

Quando controllo in C#,

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

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

Ci sono un sacco di siti web utilizzando [^a-zA-Z] per l'alfabeto. Non sono sicuro di quale sia la risposta corretta.

+0

Grazie mille per le vostre risposte. Posso vedere chiaramente ora. – Win

+9

Felice che la pioggia non ci sia più! – tloflin

+2

BTW, C# non ha espressioni regolari. .NET Framework lo fa. –

risposta

55

Sì, il primo significa "corrisponde a tutte le stringhe che iniziano con una lettera", il secondo significa "corrisponde a tutte le stringhe che contengono una non lettera". Il segno di omissione ("^") viene utilizzato in due modi diversi, uno per segnalare l'inizio del testo, uno per annullare una corrispondenza di carattere all'interno di parentesi quadre.

+1

+1 migliore di entrambi i mondi: conciso E corretto. – Dathan

5

C'è una differenza.

Quando il carattere ^ viene visualizzato all'esterno di [] corrisponde all'inizio della riga (o stringa). Quando il carattere ^ viene visualizzato all'interno di [], corrisponde a qualsiasi carattere non visualizzato all'interno dello [].

9

^[a-zA-Z]: qualsiasi az o AZ all'inizio di una linea

[^a-zA-Z] intende qualsiasi carattere che non è az o AZ

3

^al di fuori della classe di caratteri ("[a-zA-Z]") osserva che è l'operatore "inizia con".
^ all'interno del carattere nega la classe specificata.

Quindi, "^ [a-zA-Z]" si traduce in "inizia con carattere da az o AZ" e "[^ a-zA-Z]" si traduce in "non è né az né AZ"

Ecco un breve riferimento: http://www.regular-expressions.info/reference.html