Checkmark on Circle.png

Regulärer Ausdruck

Aus KGS-Wiki
(Weitergeleitet von Regex)

Ein regulärer Ausdruck ist eine Möglichkeit, Wörter formaler Sprachen zu beschreiben. Anders als eine formale Grammatik beschreibt ein regulärer Ausdruck dabei nur die Syntax eines Wortes und kann nichts über dessen Semantik aussagen. Mit regulären Ausdrücken können nicht alle Sprachen beschrieben werden, die mit einer formalen Grammatik beschrieben werden können.

Der wichtigste Unterschied zu einer formalen Grammatik ist: eine formale Grammatik gibt Regeln zum Erzeugen eines Wortes an, ein regulärer Ausdruck dient nur der Überprüfung. Ob ein Wort einem regulären Ausdruck entspricht, kann dabei wesentlich schneller überprüft werden, als ob das Wort den Regeln einer Grammatik entspricht.

Syntaxelemente

Siehe auch Phantastische ASCII-Zeichen und wo sie zu finden sind für eine Übersicht, wie man diese Symbole auf der Tastatur eingibt.

Die wichtigsten Syntaxelemente zum Suchen von regulären Ausdrücken
Schreibweise Bedeutung Beispielwörter
(abc|def) abc oder def abc, def
[abcde] a, b, c, d oder e a, b, e
[0-9] eine Ziffer von 0 bis 9 1, 5, 8
[k-r] ein Buchstabe von k bis r l, o, q
[A-Za-z] ein Groß- oder ein Kleinbuchstabe D, z, P
[^abcde] alles außer a, b, c, d und e g, 6, !
a* beliebig viele a (auch keines!) aaaaaa, , a
a+ beliebig viele a (mindestens eines!) – entspricht aa* a, aaa, aaaaaaa
abc* ab und dann beliebig viele c ab, abccc, abccccc
(abc)* beliebig viele abc abc, abcabcabc,
def? de und dann ein f oder nicht de, def
[a-z]{5} fünf Kleinbuchstaben hallo, alles, roger
a{4,7} mindestens 4 und höchstens 7 a aaaa, aaaaa, aaaaaaa
^abc abc am Anfang der Zeile
def$ def am Ende der Zeile
. ein beliebiges Zeichen z, 7, §
\?, \., \*, \[, \] usw. Diese Zeichen haben eine Funktion. Um nach den Zeichen selbst suchen zu können, muss der \ davorgesetzt werden.

Beispiele

Autokennzeichen

[A-ZÄÖÜ]{1,3}-[A-Z]{1,2} [0-9]{1,4}[HE]?
lies:
Teil Erläuterung Beispiele
[A-ZÄÖÜ]{1,3} Ein bis drei Großbuchstaben inkl. Umlaute NMS, RD, KI, PLÖ
- Ein Bindestrich -
[A-Z]{1,2} Ein bis zwei Großbuchstaben ohne Umlaute EL, WI, TK, P
Ein Leerzeichen
[0-9]{1,4} Eine bis vier Ziffern 1313, 1921, 480
[HE]? Ein H (für Oldtimer), ein E (für Elektro-Autos) oder gar nichts H, E,

Beispiele für das Gesamtergebnis: NMS-KG 123 oder PLÖ-RX 42E

👉
Hinweis

Es wird nur die Syntax, d.h. der grundlegende Aufbau der Zeichenkette überprüft, aber nicht, ob es sich dabei wirklich um ein reales Kennzeichen handelt. Ä-A 0 wäre zum Beispiel kein gültiges Kennzeichen (keine Stadt und kein Kreis gibt Ä-Kennzeichen aus; 0 ist als Zahl nicht zugelassen), entspricht aber dem regulären Ausdruck.

Dateinamen von Bilddateien

.+\.(jpe?g|png|gif)
lies:
Teil Erläuterung Beispiele
.+ beliebig viele beliebige Zeichen Shruggie, BlueJ Objektinspektor
\. Ein Punkt. Beachte: . ist irgendein Zeichen, \. ist nur der Punkt .
(jpe?g|png|gif) Entweder jpg, jpeg, png oder gif jpg, jpeg, png, gif

Beispiele für das Gesamtergebnis: Shruggie.jpeg, BlueJ Objektinspektor.png

Suchen und Ersetzen

Eines der Hauptanwendungsgebiete für reguläre Ausdrücke ist das Suchen und Ersetzen von Zeichenketten.

Beim Ersetzen ist folgende Funktion hilfreich: alle Teile des regulären Such-Ausdrucks, die in runden Klammern stehen, können beim Ersetzen wiederverwendet werden. Diese werden durchnummeriert und können, je nach verwendetem Programm, mit \1, \2, \3 usw. oder mit $1, $2, $3 usw. eingebaut werden. Mit \0 bzw. $0 kann außerdem auf den ganzen bei der Suche gefundenen Text Bezug genommen werden.

💬
Beispiel
Eine Reihe von Bilddateinamen

In einem Ordner sind Fotos aus zwei Quellen. Die einen sind nur mit Datum und Uhrzeit des Aufnahmezeitpunktes benannt, die anderen tragen zusätzlich das Präfix IMG_. Nun kann man einfach nach Dateien namens IMG_(.*) suchen und sie in \1 umbenennen.

Hier passiert im Einzelnen Folgendes:

  1. IMG_20160401_165826.jpg wird als zum Muster IMG_(.*) passend erkannt.
  2. Die Referenz \0 wird auf IMG_20160401_165826.jpg gesetzt und \1 auf 20160401_165826.jpg
  3. Die Umbenennung kann erfolgen

Zum Weiterlesen