2013-11-14 11 views
41

Ein Punkt . in einem regulären Ausdruck entspricht einem beliebigen einzelnen Zeichen. Damit Regex einem Punkt entspricht, muss der Punkt maskiert werden: \.Muss ein Punkt in einer Zeichenklasse (eckige Klammern) eines regulären Ausdrucks maskiert werden?

It has been pointed out to me dass in eckigen Klammern [] ein Punkt nicht maskiert werden muss. Zum Beispiel würde der Ausdruck: [.]{3} mit ... Zeichenfolge übereinstimmen.

Nicht wahr? Und wenn ja, gilt das für alle Regex-Standards?

+0

Ja das ist wahr, dass DOT (und die meisten anderen Sonderzeichen) in der Zeichenklasse nicht maskiert werden müssen. – anubhava

+2

Es gibt keinen "Standard" für die Syntax regulärer Ausdrücke. – BoltClock

+1

@BoltClock gibt es einige: posix, posix erweitert, perl. Siehe http://en.wikipedia.org/wiki/Regular_expression#Standards – Dariusz

Antwort

58

In einer Zeichenklasse (eckige Klammern) alle Zeichen außer ^, -, ] oder \ ist ein Literal.

Diese Website ist eine brillante Referenz und hat viele Informationen über die Nuancen verschiedener Regex-Aromen. http://www.regular-expressions.info/refcharclass.html

+2

Es hängt wirklich davon ab, wie die Sprache es behandelt, aber für die meisten Sprachen ist das wahr. –

+15

'-' ist auch literal, wenn es der letzte Wert ist –

+0

In ICU- und Java-Regexps müssen die' ['' '' '' innerhalb einer Zeichenklasse maskiert werden (und '{' '' '' '' müssen außerhalb des Zeichens maskiert werden) Klasse). –

Verwandte Themen