Überblick (What)
Dieser Artikel ist eine umfassende technische Referenz zur praktischen und portablen Verwendung regulärer Ausdrücke. Er behandelt Syntax, mehrzeilige Musterverarbeitung, Ersetzungstechniken, Tool-Kompatibilität und wartbare Pattern-Entwürfe.
Ziel (Why)
Reguläre Ausdrücke sind essenziell für Textverarbeitung: Validierung, Parsing, Transformation und Datenextraktion. Sie sind in nahezu allen Programmiersprachen und Plattformen nutzbar – korrekt eingesetzt ermöglichen sie effiziente Automatisierung und Analyse.
Teil 1: Grundlegende Syntax
Muster | Bedeutung | Beispiel | Übereinstimmung |
---|---|---|---|
. |
Beliebiges Zeichen außer Zeilenumbruch | a.c |
abc , a-c |
* |
0 oder mehr Wiederholungen des Zeichens davor | go*gle |
ggle , google |
+ |
1 oder mehr Wiederholungen des Zeichens davor | go+gle |
gogle , google |
? |
0 oder 1 Wiederholung des Zeichens davor | colou?r |
color , colour |
{n} |
Genau n Wiederholungen | a{3} |
aaa |
{n,m} |
Zwischen n und m Wiederholungen | a{2,4} |
aa , aaa , aaaa |
^ |
Zeilenanfang | ^abc |
Zeilenbeginn mit abc |
$ |
Zeilenende | abc$ |
Zeilenende mit abc |
[] |
Eine von mehreren Optionen | [abc] |
a , b , c |
[^] |
Nicht diese Zeichen | [^0-9] |
Nicht-Ziffern |
\d |
Ziffern | \d+ |
123 , 007 |
\D |
Nicht-Ziffern | \D+ |
abc , XYZ |
\w |
Wortzeichen (Buchstaben/Ziffern/_) | \w+ |
abc_123 |
\W |
Nicht-Wortzeichen | \W+ |
#@! , Leerzeichen |
\s |
Whitespace | \s+ |
Space, Tab, Zeilenumbruch |
\S |
Nicht-Whitespace | \S+ |
abc , 123 |
` | ` | Oder | `foo |
() |
Gruppierung | (abc)+ |
abcabc |
\b |
Wortgrenze | \bregex\b |
Nur das Wort selbst |
Teil 2: Nützliche Muster (Mehrsprachig)
Zweck | Pattern | Hinweis |
---|---|---|
Nur Zahlen | ^\d+$ |
Ganze Zeichenkette |
Dezimalzahl | ^\d+\.\d+$ |
Genau ein Punkt erlaubt |
Alphanumerisch | ^[a-zA-Z0-9]+$ |
Für Benutzer-IDs geeignet |
E-Mail (einfach) | ^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$ |
Typischer Aufbau |
URL (http/https) | https?://[\w.-]+\.[a-zA-Z]{2,}(/[\w./?=&%-]*)? |
Einschließlich Pfad |
ISO-Datum | \d{4}-\d{2}-\d{2} |
YYYY-MM-DD |
Internationale Tel. | \+\d{1,3}[\s-]?\d{1,14} |
z.B. +49 151... |
Benutzername | ^[a-zA-Z0-9._-]{3,20}$ |
Für soziale Netzwerke |
Passwortstärke | ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ |
Mind. 8 Zeichen, Mix |
Teil 3: Mehrzeilige Matches (Multi-Line)
🔹 Warum [\s\S]*? verwenden?
Das Zeichen .
matcht standardmäßig keine Zeilenumbrüche. Für sichere mehrzeilige Matches empfiehlt sich:
[\s\S]*?
Dies deckt alle Zeichen ab, einschließlich Zeilenumbrüchen – nicht gierig.
💡 Tipp: In manchen Tools wie VSCode ist
[\s\S\n]*?
möglich – redundant, aber manchmal robuster.
🔹 Häufige Anwendungsfälle
Zweck | Pattern | Hinweis |
---|---|---|
Beliebiger Textblock | [\s\S]*? |
Sicher auch über Zeilen hinweg |
HTML-Div-Block | <div[\s\S]*?</div> |
Vom öffnenden bis schließenden |
HTML-Kommentare | <!--[\s\S]*?--> |
Gilt für alle Kommentare |
Markdown-Codeblock | "[\s\S]*? " |
Für ... -Bereiche |
Teil 4: Ersetzungstechniken
🔹 Gruppenzugriff
Ersetzungen verwenden Gruppenreferenzen:
${1}
,${2}
(VSCode, .NET, Python)$1
,$2
(JavaScript, sed)
🔹 Praktische Beispiele
Aufgabe | Muster | Ersetzung |
---|---|---|
Wörter tauschen | (\w+)\s+(\w+) |
${2} ${1} |
Text mit <span> |
>([^<]+)< |
><span>${1}</span>< |
CSV zu JSON | ^([^,]+),([^,]+),([^,]+)$ |
{ "a": "${1}", "b": "${2}", "c": "${3}" } |
Datumsformat ändern | (\d{4})/(\d{2})/(\d{2}) |
${1}-${2}-${3} |
CamelCase zu snake_case | ([a-z])([A-Z]) |
${1}_${2} |
Teil 5: Tool-Kompatibilität & Flags
Tool | Mehrzeilig | Nicht-gierig | Ersetzungsformat | Hinweise |
---|---|---|---|---|
VSCode | ✅ (Suche) | ✅ | ${1} |
[\s\S]*? oder [\s\S\n]*? empfohlen |
JavaScript | ✅ (Flag s ) |
✅ | $1 , $<name> |
Named Groups verfügbar |
Python (re ) |
✅ (DOTALL ) |
✅ | \g<1> , \1 |
Verwende rohe Strings r"" |
sed | ❌ | ❌ | \1 , \2 |
Nur einfache Syntax |
grep/egrep | ❌ | ❌ | ❌ | Nur Suche, keine Ersetzung möglich |
Teil 6: Designprinzipien & Antipatterns
✅ Best Practices
- Immer
[\s\S]*?
für mehrzeilige Blöcke verwenden (ggf.[\s\S\n]*?
) .*
vermeiden – nutze stattdessen nicht-gierige Varianten- Nicht-capturing Gruppen mit
(?:...)
schreiben, wenn Capturing nicht nötig - Named Groups für bessere Lesbarkeit (z. B.
(?<year>\d{4})
) - Für komplexe Patterns: Kommentare oder
re.VERBOSE
(Python)
❌ Antipatterns
Pattern | Problem |
---|---|
.* |
Gierige Matches, oft zu weitreichend |
[^a-z] |
Keine Unterstützung für Umlaute usw. |
Verschachtelung | Reguläre Ausdrücke ungeeignet für HTML/XML |
.+ |
Matcht auch Leerzeilen oder nur Spaces |
Fazit (Conclusion)
Diese Referenz bietet einen vollständigen, praktischen Überblick über den professionellen Einsatz regulärer Ausdrücke.
Verwende für mehrzeilige Inhalte zuverlässig [\s\S]*?
, beachte Tool-spezifische Besonderheiten und entwickle wartbare, lesbare Patterns.
Gut gestaltete reguläre Ausdrücke sind ein mächtiges und wiederverwendbares Werkzeug im Entwickleralltag.