Moin,
»» 1. /[a-c-g]/ heißt, entweder ein Buchstabe von a bis c oder das Bindestrich oder ein g.
äh, ja ... und sehr unkonventionell.
»» Was ist an dem \ jetzt so besonders mitten in einer Zeichenkette?
Der Backslash dient als Escape-Zeichen und nimmt einem nachfolgenden Sonderzeichen seine Sonderbedeutung. Er erzwingt, dass das nachfolgende Zeichen einfach "wörtlich" genommen wird.
Sonderbedeutung, ja. Wie in Java in der Zeichenkette.
Aber das "wörtlich" nehmen ist ja nicht immer so
Im folgenden Fall nimmt er das "d" ja nicht wörtlich:
[a-z\dABC]
Also, entweder alle Kleinbuchstaben von a-z, eine Zahl oder A, B, C.
»» Mit \* könnte ich sagen, dass das * als Zeichen erkannt werden soll.
Genau.
»» Aber in einer Zeichenkette würde das * doch eh als Zeichenkette erkannt
Nein: In einem normalen RegEx-Pattern würde ein Stern '*' logisch dem vorangehenden Zeichen als Quantifier zugeordnet.
Das hatte mich irritiert, weil der Quantifier ja nur außerhalb von Zeichenklassen gehen sollte. (Netzonaut)
D.h.,
[abcAB*] sollte ganz normal als Stern erkannt werden. Deshalb hat es mich nun irritiert, warum man den \ einsetzen muss [abcAB\*]
Außerhalb wäre es ganz normal als Quantifier, das ist klar [abcAB]*
Grüße