Regex-Grundlagen-Spickzettel
Ein regulärer Ausdruck (Regex) ist ein Muster, das Text abgleicht. Jedes Symbol, genannt Token, ändert das Verhalten des Musters. Der Spickzettel unten führt die meistgenutzten Token mit einfacher Bedeutung und einem kleinen Testbeispiel auf.
| Token | Bedeutung | Beispiel |
|---|---|---|
| . | Matches any single character except newline. | a.c matches abc, a c |
| * | Matches the preceding token zero or more times. | ab* matches a, abb |
| + | Matches the preceding token one or more times. | ab+ matches ab, abb |
| ? | Makes the preceding token optional (zero or one). | colou?r matches color, colour |
| [] | Character set: matches any one character inside. | [aeiou] matches any vowel |
| [^] | Negated set: matches any character NOT inside. | [^0-9] matches any non-digit |
| \d | Matches any digit (0-9). | \d+ matches 42, 007 |
| \w | Matches any word character (a-z, A-Z, 0-9, _). | \w+ matches hello_1 |
| \s | Matches any whitespace (space, tab, newline). | a\sb matches a b |
| ^ | Anchors the match to the start of a line/string. | ^Hello matches start of string |
| $ | Anchors the match to the end of a line/string. | world$ matches end of string |
| | | Alternation: matches the pattern on either side. | cat|dog matches cat or dog |
| () | Groups a sub-pattern (and captures it). | (ab)+ matches ab, abab |
| {n,m} | Quantifier: match the preceding token n to m times. | a{2,4} matches aa, aaaa |
| (?i) | Inline flag: makes the pattern case-insensitive. | (?i)hello matches HELLO |
Hinweise
- Die meisten Token verlieren innerhalb einer Zeichenklasse [ ] ihre Sonderbedeutung. Zum Beispiel matcht . in [] nur einen wörtlichen Punkt.
- Der Backslash (\) ist das Escape-Zeichen: er macht aus einem Sonder-Token ein literales Zeichen und umgekehrt.
- Engines unterscheiden sich: Python, JavaScript, PCRE und Golang teilen die meisten Token, aber Flags und Look-around unterscheiden sich.
Häufige Fragen
- Wofür steht der Punkt (.)?
- Standardmäßig matcht der Punkt jedes einzelne Zeichen außer einem Zeilenumbruch. Für einen literalen Punkt muss man ihn mit \ escapen.
- Was ist der Unterschied zwischen * und +?
- Der Asterisk * matcht das vorherige Token null oder mehrmals, also matcht 'ab*' auch 'a'. Das Plus + verlangt mindestens eins, es matcht 'ab', aber nicht nur 'a'.
- Wie matche ich eine Ziffer oder ein Wortzeichen?
- Nutze \d für eine Ziffer (0-9) und \w für ein Wortzeichen (Buchstaben, Ziffern, Unterstrich). Die Negationen sind \D und \W.
- Was machen ^ und $ ?
- ^ verankert den Match am Anfang der Zeichenkette oder Zeile; $ am Ende. Zusammen erzwingt ^Muster$ einen Match der ganzen Zeichenkette.