Muss ein Punkt in einer Zeichenklasse (eckige Klammern) eines regulären Ausdrucks maskiert werden?

91

Ein Punkt .in einem regulären Ausdruck entspricht einem einzelnen Zeichen. Damit Regex mit einem Punkt übereinstimmt, muss der Punkt maskiert werden:\.

Ich wurde darauf hingewiesen, dass in eckigen Klammern []ein Punkt nicht maskiert werden muss. Zum Beispiel [.]{3}würde der Ausdruck: mit der ...Zeichenfolge übereinstimmen .

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

Dariusz
quelle
Ja, das stimmt, dass DOT (und die meisten anderen Sonderzeichen) nicht in der Zeichenklasse maskiert werden müssen.
Anubhava
3
Es gibt keinen "Standard" für die Syntax regulärer Ausdrücke.
BoltClock
3
@BoltClock gibt es einige: Posix, Posix Extended, Perl. Siehe en.wikipedia.org/wiki/Regular_expression#Standards
Dariusz
1
@Dariusz waren Sie derjenige, der mich abgewählt hat, weil Sie dachten, ich hätte mich geirrt? Wenn ja, möchte ich meine 2 Punkte zurück :)
Paul Samsotha
@peeskillet ja ich war, ich stehe korrigiert. Danke und Entschuldigung.
Dariusz

Antworten:

128

In einer Zeichenklasse (eckige Klammern) mit Ausnahme jedes Zeichen ^, -, ]oder \ist ein Literal.

Diese Website ist eine brillante Referenz und enthält viele Informationen zu den Nuancen verschiedener Regex-Aromen. http://www.regular-expressions.info/refcharclass.html

lilactiger89
quelle
3
Es hängt wirklich davon ab, wie die Sprache damit umgeht, aber für die meisten Sprachen ist dies wahr.
Patrick Oscity
40
-ist auch wörtlich, wenn es der letzte Wert ist
CONvid19
16
Und ^ ist wörtlich, wenn es nicht das erste Zeichen ist
Nigel B. Peck
1
Wenn $ wie eine Variable aussieht, muss es auch maskiert werden. ZB: [$.]
W3Coder
1
@ PedroLobito Und wenn es das erste ist, denke ich
Tim Malone