Um reguläre Ausdrücke - das Schweizer Taschenmesser für ITler -
geht es in der einhundertsechzigsten Episode des
IT-Berufe-Podcasts. TL;DR Ich arbeite fast täglich mit regulären
Ausdrücken, um Texte nach Mustern zu durchsuchen und gefundene
Inhalte zu verändern. Mit wenigen Grundbausteinen kannst du
beispielsweise E-Mail-Adressen herausfiltern oder Vor- und
Nachnamen vertauschen. Als IT-Azubi kannst du diese Kenntnisse in
vielen Editoren und auf der Kommandozeile einsetzen. Für beliebige
HTML- und XML-Dokumente brauchst du einen passenden Parser; bei
Anwendungen mit hohen Anforderungen an die Laufzeit solltest du den
Rechenaufwand regulärer Ausdrücke beachten. Kapitelmarken
[00:00:01] Einstieg: Reguläre Ausdrücke im IT-Alltag [00:00:49] Was
reguläre Ausdrücke leisten [00:03:04] Die Syntax verstehen und mit
Websites ausprobieren [00:06:13] Muster beschreiben und Zeichen
getrennt von ihrer Anzahl festlegen [00:09:35] Unterschiedliche
Schreibweisen von Meier suchen [00:10:50] E-Mail-Adressen aus
Dateien herausfiltern [00:12:03] Einsatz in Systemintegration und
beim Bearbeiten von Listen [00:13:06] Wörtlich suchen und
Sonderzeichen escapen [00:14:40] Erlaubte Zeichen und Grenzen des
E-Mail-Beispiels [00:18:12] Zeichenbereiche mit eckigen Klammern
bilden [00:20:30] Zeichenbereiche negieren [00:22:01] Zeilenanfang
und Zeilenende erkennen [00:24:15] Der Punkt als Platzhalter
[00:25:19] Quantifizierer und genaue Anzahlen [00:28:53] Ein
vereinfachtes Suchmuster für E-Mail-Adressen [00:31:16]
Alternativen mit der Pipe verbinden [00:33:03] Gruppen bilden und
Inhalte beim Ersetzen wiederverwenden [00:36:40] Die wichtigsten
Syntaxbausteine im Überblick [00:38:41] Praxisbeispiel: UUIDs
herausfiltern [00:40:28] E-Mail-Adressen suchen und Namen
vertauschen [00:41:33] Leerzeichen am Zeilenende entfernen
[00:42:07] Markdown-Aufzählungszeichen einfügen [00:43:47] Felder
für Klassen vorbereiten und im Blockmodus bearbeiten [00:45:54]
Links zwischen HTML und Markdown umschreiben [00:47:29] Grenzen
beim Verarbeiten von HTML und XML [00:49:17] Rechenaufwand und der
Ausfall von Stack Overflow [00:50:37] Reguläre Ausdrücke in Shells,
Editoren und IDEs [00:51:51] Literaturempfehlung und Websites zum
Lernen [00:53:14] Feedback und Abschied Inhalt Ich schwärme immer
mal wieder von regulären Ausdrücken. Das liegt wohl einfach daran,
dass ich fast täglich mit ihnen arbeite. Sie sind einfach so
unglaublich vielseitig verwendbar und machen ITlern das Leben
leichter - wenn man sie beherrscht. Nicht umsonst gibt es diesen
"Witz": Ich hatte ein Problem und versuchte es mit regulären
Ausdrücken zu lösen. Nun habe ich zwei Probleme. In den Händen
eines erfahrenen Anwenders sind reguläre Ausdrücke allerdings
äußerst hilfreich. Sinn regulärer Ausdrücke Reguläre Ausdrücke
dienen der Mustererkennung in Zeichenketten und sind quasi
Platzhalter on steroids. Statt der einfachen Platzhalter wie * oder
? z.B. in Dateinamen, gibt es viele verschiedene Platzhalter,
Quantifizierer und weitere Regeln, um Muster in Texten zu
definieren. Nach diesen Mustern kannst du suchen oder du kannst sie
zum Ersetzen von Inhalten benutzen. Teilmuster lassen sich
gruppieren und beim Ersetzen wiederverwenden. So gut wie jede
Programmiersprache enthält eine eingebaute Unterstützung für
reguläre Ausdrücke. Jeder vernünftige Texteditor unterstützt
reguläre Ausdrücke beim Suchen und Ersetzen genauso wie eine gute
Shell (z.B. Bash oder PowerShell). Grundlegende Muster konkreten
Zeichen(-folgen): hallo Bereiche: [], z.B. [a-z], [0-9], [aeiou]
Negation mit ^, z.B. [^abc] Zeilenanfang: ^ (nicht mit der Negation
verwechseln!) Zeilenende: $ Platzhalter für ein beliebiges Zeichen:
. Alternativen: A|B Quantifizierer (stehen hinter dem Muster)
einmal oder keinmal (0..1): ? keinmal, einmal oder mehrmals (0..n):
* einmal oder mehrmals (1..n): + genaue Anzahl: {8}, {2,5} (2 bis 5
mal) Gruppen: (), Referenz mit $1 Escapen von besonderen Zeichen
(insb. alle obigen): \ Anwendungsfälle aus meiner Praxis Reguläre
Ausdrücke gehören in den Werkzeugkasten jedes ITlers! Egal ob
Anwendungsentwicklung oder Systemadministration, reguläre Ausdrücke
können vielfältig eingesetzt werden. In der Linux-Administration
können z.B. Black- und Whitelists für Hostnamen mit regulären
Ausdrücken definiert werden. Die Apache-Konfiguration verwendet
ebenfalls reguläre Ausdrücke. Auf der Linux-Kommandozeile kannst du
mit grep in Dateien nach regulären Ausdrücken suchen. sed
ermöglicht dir die Massenverarbeitung von Dateien. Das Suchen und
Ersetzen im vi wird standardmäßig auch mit regulären Ausdrücken
gemacht und du kannst sogar mit ihnen navigieren ($ springt z.B.
zum Ende der Zeile). Suchen und Ersetzen in Dateien Listen
umformatieren Nachname/Vorname zu Vorname/Nachname Anfang oder Ende
von Zeilen manipulieren Markdown in HTML und umgekehrt Feldnamen
mit public String ; umschließen Batchdatei generieren zum
Verschieben von Dateien Whitespace trimmen UUIDs/Domains/Mails in
Text/Logs finden Konkrete Beispiele Gerade vor wenigen Tagen hatte
ich die - eigentlich triviale - Aufgabe, ein paar Dateien
umzubenennen, die ein bestimmtes Präfix hatten. Dieses Präfix
sollte ausgetauscht werden. Anstatt die Dateien per Hand
umzubenennen (oder die entsprechende Shell-Funktion zu nutzen ;-)
), habe ich mir mit einem simplen regulären Ausdruck in wenigen
Sekunden ein Shell-Script gebaut, das die Aufgabe für mich löst.
Basis war die Liste der Dateien, die ich in der PowerShell mit dir
| ac liste.ps1 erstellt habe. prefix-Datei1.txt prefix-Datei2.txt
... prefix-Datei100.txt Mit dem Suchen-/Ersetzen-Muster
/^(prefix-(.*))$/move $1 neuerPrefix-$2/g im Vim wurde daraus: move
prefix-Datei1.txt neuerPrefix-Datei1.txt move prefix-Datei2.txt
neuerPrefix-Datei2.txt ... move prefix-Datei100.txt
neuerPrefix-Datei100.txt Die Datei konnte ich dann einfach mit
.\liste.ps1 ausführen und war fertig! UUIDs suchen Text: Text mit
UUIDs wie z.B. 550e8400-e29b-11d4-a716-446655440000 mittendrin
RegEx: [a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}
Suchergebnis: 550e8400-e29b-11d4-a716-446655440000 E-Mail-Adressen
suchen Text: Stefan Macke (mail@example.com) hat einen Podcast.
RegEx: [a-z]+@[a-z]+\.[a-z]{2,3} (nicht ausreichend für echte
Mails!) Suchergebnis: mail@example.com Vor-/Nachnamen vertauschen
Text: Stefan Macke RegEx: (.+) (.+) Ersetzen durch: $2, $1
Ergebnis: Macke, Stefan Trailing Whitespace entfernen Text: Zeile
mit Leerzeichen am Ende RegEx: +$ Ersetzen durch: `` Ergebnis:
Zeile mit Leerzeichen am Ende Aus Zeilen Markdown-Aufzählungen
machen Text: Listenpunkt 1 RegEx: ^ Ersetzen durch: * (Asterisk
muss ggfs. escapet werden) Ergebnis: * Listenpunkt 1 Aus Namen
Java-Attribute machen Text: alterDerPersonInJahren RegEx: (.+)
Ersetzen durch: private Integer $1; Ergebnis: private Integer
alterDerPersonInJahren; Aus HTML-Links Markdown machen Text:
IT-Berufe-Podcast RegEx: ([^
Kommentare (0)
Melde dich an, um einen Kommentar zu schreiben.