2010-05-07 7 views
16

Gibt es einen Unterschied zwischen ^[a-zA-Z] und [^a-zA-Z]?Regulärer Ausdruck "^ [a-zA-Z]" oder "[^ a-zA-Z]"

Wenn ich in C# zu überprüfen,

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

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

Es gibt eine Menge von Web-Site [^a-zA-Z] für das Alphabet. Ich bin mir nicht wirklich sicher, welche die richtige Antwort ist.

+0

Vielen Dank für Ihre Antworten. Jetzt kann ich klar sehen. – Win

+9

Froh, dass der Regen weg ist! – tloflin

+2

BTW, C# hat keine regulären Ausdrücke. Das .NET Framework funktioniert. –

Antwort

55

Ja, die erste bedeutet "alle Zeichenfolgen, die mit einem Buchstaben beginnen", die zweite bedeutet "alle Zeichenfolgen, die einen Nicht-Buchstaben enthalten". Das Caret ("^") wird auf zwei verschiedene Arten verwendet, eine um den Anfang des Textes zu signalisieren, eine um eine Zeichenübereinstimmung in eckigen Klammern zu negieren.

+1

+1 Beste aus beiden Welten - kurz und korrekt. – Dathan

5

Es gibt einen Unterschied.

Wenn das Zeichen ^ außerhalb von [] erscheint, wird der Anfang der Zeile (oder Zeichenfolge) abgeglichen. Wenn das Zeichen ^ innerhalb der [] erscheint, stimmt es mit allen Zeichen überein, die nicht innerhalb der [] erscheinen.

9

^[a-zA-Z] jedes az oder AZ am Anfang einer Zeile

[^a-zA-Z] jedes Zeichen, das nicht az OR AZ

3

^außerhalb der Zeichenklasse ("[a-zA-Z]") stellt fest, dass es sich um den Operator "Beginnt mit" handelt.
^ innerhalb des Zeichens negiert die angegebene Klasse.

Also "^ [a-zA-Z]" übersetzt zu "beginnt mit Zeichen von AZ oder AZ" und "[^ a-zA-Z]" übersetzt zu "ist entweder nicht az oder AZ"

Hier ist eine kurze Referenz: http://www.regular-expressions.info/reference.html