Regulärer Ausdruck: Unterschied zwischen den Versionen

Aus KGS-Wiki
(Abschnitt Suchen und Ersetzen)
Zeile 4: Zeile 4:


== Syntaxelemente ==
== Syntaxelemente ==
{| class="wikitable"
{| class="wikitable mw-collapsible"
|+Die wichtigsten Syntaxelemente von regulären Ausdrücken
|+Die wichtigsten Syntaxelemente zum Suchen von regulären Ausdrücken
|'''Schreibweise'''
|'''Schreibweise'''
|'''Bedeutung'''
|'''Bedeutung'''
Zeile 116: Zeile 116:
|}
|}
Beispiele für das Gesamtergebnis: <code>NMS-KG 123</code> oder <code>PLÖ-RX 42E</code>
Beispiele für das Gesamtergebnis: <code>NMS-KG 123</code> oder <code>PLÖ-RX 42E</code>
Beachte: 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. <code>Ä-A 0</code> 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 ===
=== Dateinamen von Bilddateien ===
Zeile 140: Zeile 142:
|}
|}
Beispiele für das Gesamtergebnis: <code>[[:Datei:Shruggie.jpeg|Shruggie.jpeg]]</code>, <code>[[:Datei:BlueJ Objektinspektor.png|BlueJ Objektinspektor.png]]</code>
Beispiele für das Gesamtergebnis: <code>[[:Datei:Shruggie.jpeg|Shruggie.jpeg]]</code>, <code>[[:Datei:BlueJ Objektinspektor.png|BlueJ Objektinspektor.png]]</code>
== Suchen und Ersetzen ==
[[Datei:Bilddateinamen.png|mini|Eine Reihe von Bilddateinamen]]
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 <code>\1</code>, <code>\2</code>, <code>\3</code> usw. oder mit <code>$1</code>, <code>$2</code>, <code>$3</code> usw. eingebaut werden. Mit <code>\0</code> bzw. <code>$0</code> kann außerdem auf den ganzen bei der Suche gefundenen Text Bezug genommen werden.
=== Beispiel ===
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 <code>IMG_</code>. Nun kann man einfach nach Dateien namens <code>IMG_(.*)</code> suchen und sie in <code>\1</code> umbenennen.
Hier passiert im Einzelnen Folgendes:
# <code>IMG_20160401_165826.jpg</code> wird als zum Muster <code>IMG_(.*)</code> passend erkannt.
# Die Referenz <code>\0</code> wird auf <code>IMG_20160401_165826.jpg</code> gesetzt und <code>\1</code> auf <code>20160401_165826.jpg</code>
# Die Umbenennung kann erfolgen


== Zum Weiterlesen ==
== Zum Weiterlesen ==

Version vom 13. September 2023, 14:02 Uhr

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

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

Beachte: 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

Eine Reihe von Bilddateinamen

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

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