Syntax der regulären Ausdrücke (Regex)

Navigation:  Anhang >

Syntax der regulären Ausdrücke (Regex)

Previous pageReturn to chapter overviewNext page

Für Fälle, in denen eine einfache Mustererkennung ausreichend ist, wird die native Mustererkennung von Opus empfohlen. Für anspruchsvollere Zwecke ist in vielen Dialogen von Opus eine vollständige Mustererkennung vorhanden.

Normalerweise, wenn lediglich eine Suche nach einem Teilstring innerhalb eines Strings ausgeführt wird, so muss die Suchsequenz exakt sein. Wenn also nach einem Teilstring “abc” gesucht wird, dann muss der durchsuchte String genau diese Zeichen in der gleichen Folge enthalten, damit ein Treffer zurückgegeben wird. Es ist möglich, diese Suche auf eine nicht case-sensitive Suche abzuändern, in denen bei der Suche nach dem Teilstring “abc” auch Strings wie “Abc” oder “ABC” usw. zu einem Suchtreffer führen würden. Der verwendete case wird also ignoriert, aber die genaue Reihenfolge bliebe dennoch relevant. Gelegentlich ist eine nicht case-sensitive Suche immer noch nicht genau genug. Wenn beispielsweise nach einem nummerischen Wert gesucht werden soll, führt das oft dazu, dass im Prinzip nach jeder Ziffer einzeln gesucht werden müsste. An diesem Punkt können reguläre Ausdrücke von großem Nutzen sein.

Reguläre Ausdrücke sind Textmuster, die für Textvergleiche verwendet werden. Reguläre Ausdrücke sind Strings, die eine Mischung aus normalen Zeichen und speziellen Zeichen bzw. Kürzeln enthalten und auf diese Weise anzeigen, welche Regeln der Mustererkennung zur Anwendung kommen.

Angenommen, es wird nach einer nummerischen Stelle gesucht, dann wäre der entsprechende reguläre Ausdruck für diese Suche “[0-9]”. Die Klammern zeigen an, dass der Suchstring mit dem in den Klammern eingeschlossenen Ziffernbereich verglichen wird und passen muss, um einen Treffer zu liefern. Der Bindestrich (-) zwischen 0 und 9 zeigt an, dass der Zahlenbereich zwischen 0 und 9 liegt. Jedes Zeichen, oder genauer, jede Ziffer zwischen 0 und 9 wird daher mit diesem regulären Ausdruck einen Treffer zurückliefern. Wenn nach einem bestimmten Zeichen buchstäblich (literal) gesucht werden soll, muss ein Backslash vor das gesuchte besondere Zeichen gesetzt werden. Zum Beispiel passt der reguläre Ausdruck für Einzelzeichen “\*” auf einen einzelnen Asterisk, also “*”. Die speziellen Ausdrücke werden im Folgenden kurz beschrieben:

 

Zeichen

Beschreibung

^

Der Ausdruck “^A” passt ausschließlich auf ein A am Anfang des Strings.

^

Das Caret (^) unmittelbar nach einer öffnenden eckigen Klammer ([) hat eine andere Bedeutung. Es wird benutzt, um die übrigen Zeichen innerhalb der Klammern vom erfolgreichen Vergleich mit dem Zielstring auszuschließen (soll also nicht passen). Der Ausdruck “[^0-9]” zeigt somit an, dass der Zielstring keine Ziffern enthalten soll.

$

Das Dollarzeichen ($) zeigt an, dass das Ende des Strings passen muss. Folglich passt der Ausdruck “abc$” nur dann, wenn der Suchstring “abc” sich am Ende des Strings befindet.

|

Das Alternationszeichen, besser als “Pipezeichen” bekannt, erlaubt das Auffinden von Suchtreffern, wobei nur einer der beiden (oder mehreren) Ausdrücke passen muss. Der Ausdruck “a|b” würde demnach sowohl bei “a”, als auch bei “b” passen.

.

Der Punkt (.) passt auf jedes Zeichen.

*

Der Asterisk (*) zeigt an, dass das Zeichen links vom Asterisk  in dem Ausdruck 0 oder mehrere Male passen soll.

+

Das Plus (+) ähnelt dem Asterisk, mit dem Unterschied, dass wenigstens ein Zeichen im Ausdruck links vom + passen soll.

?

Das Fragezeichen (?) passt zu dem Zeichen links davon null- oder einmal.

()

Die Klammern haben Einfluss auf die Reihenfolge des Mustervergleichs und dienen auch als markierter Ausdruck (“tagged expression”), der benutzt wird, um passende Substrings in anderen Ausdrücken zu ersetzen.

[]

Eckige Klammern (“Brackets”, [ und ]), die Zeichen umschließen, zeigen an, dass einige darin eingeschlossene Zeichen zum Zielzeichen passen können.

\

Das Backslash-Zeichen im Suchstring bewirkt ein Escape auf alle oben genannten Zeichen. Zum Beispiel zeigt “\.” (slash dot) die Suche nach einem literalen Punkt, also “.”, an.

 

Die Klammern dienen, abgesehen von ihrer Funktion, die Überprüfungsreihenfolge im regulären Ausdruck zu beeinflussen, als markierter Ausdruck, der so etwas wie einen temporären Speicher darstellt. Dieser Speicher kann benutzt werden, um gefundene Ausdrücke mit einem neuen Ausdruck zu ersetzen. Im Ausdruck für “ersetzen” kann ein Zeichen “&” angegeben werden, der den im verglichenen Ausdruck gefundenen Substring repräsentiert. Zum Beispiel, wenn der Substring, welcher zu dem regulären Ausdruck passte “ABCD” sei, dann würde ein “Replace” mittels “xyz&xyz” einen String “xyzABCDxyz” erzeugen. Der Ausdruck für dieses Replace kann auch ausgedrückt werden als “\0”, beispielsweise “xyz\0xyz”. Das “\0” zeigt einen markierten Ausdruck an, der den sämtlichen gefundenen und passenden Substring repräsentiert. Analog dazu lassen sich auf diese Weise auch andere markierte Ausdrücke wie “\1” oder “\2” für progressiv passende Strings verwenden. Zu beachten ist hierbei, dass, obwohl der markierte Begriff 0 immer definiert ist, die markierten Ausdrücke 1, 2 etc. nur dann als definiert gelten, wenn die in der Suche benutzten regulären Ausdrücke genügend Sätze von Klammern haben.

 

Hier sind ein paar Beispiele:

 

String

Suche

Ersetzen

Ergebnis

Mr.jpg

(Mr)(\..*)

\1s\2

Mrs.jpg

abc

(a)b(c)

&-\1-\2

abc-a-c

bcd

(a|b)c*d

&-\1

bcd-b

abcde

(.*)c(.*)

&-\1-\2

abcde-ab-de

cde

(ab|cd)e

&-\1

cde-cd

 

Wenn ein regulärer Ausdruck mit dem Befehl Rename benutzt wird, kann ein #-Symbol an den “alten” Dateinamen angehängt werden, um anzuzeigen, dass das Muster wiederholt werden darf. Dies erlaubt auf effektive Weise, reguläre Ausdrücke für ein systematisches “Suchen und Ersetzen” einzusetzen. Die maximale Anzahl der gewünschten möglichen Wiederholungen kann durch eine auf das “#” folgende Nummer angegeben werden, zum Beispiel:

(.*) - (.*)#5