Reguläre Ausdrücke – IT-Berufe-Podcast #160

Reguläre Ausdrücke – IT-Berufe-Podcast #160

Um reguläre Ausdrücke – das Schweizer Taschenmesser für ITler – geht es in der einhundertsechzigsten Episode des IT-Berufe-Podcasts. Inhalt Ich schwärme immer mal wieder von regulären Ausdrücken. Das liegt wohl einfach daran,
54 Minuten

Beschreibung

vor 4 Jahren

Um reguläre Ausdrücke – das Schweizer Taschenmesser für ITler –
geht es in der einhundertsechzigsten Episode des
IT-Berufe-Podcasts.
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)

Lade Inhalte...

Abonnenten

15
15