Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Die Klammern werden verwendet, um Zeichenfolgen zu gruppieren, was sich als wirklich praktisch erweist, will man Wiederholungsoperatoren auf eine Zeichenfolge und nicht lediglich auf einzelne Zeichen beziehen. Will man die Folge ABABAB in ABCABABABAD matchen, so lässt sich dies am einfachsten erzielen, wenn man mithilfe der runden Klammern AB als Gruppe definiert und ihr den Wiederholungsoperator {3} zuweist: (AB){3}. Man sei daran erinnert, dass einige Standards erfordern, dass jeder runden Klammer ein Backslash vorgeschaltet wird, falls sie als Metazeichen verwendet werden. Dies gilt ebenfalls für den senkrechten Strich

Der senkrechte Strich liefert uns schließlich den entscheidenden Operator: das ODER. Mit diesem lassen sich einfache Ausdrücke, wie fatto|a als Alternative zu fatt[oa], formulieren, doch der große Mehrwert tritt erst in Kombination mit den runden Klammern auf. So lässt sich mit diesen Metazeichen auch der Ausdruck formulieren, der mit fame und faro, nicht jedoch mit fare (oder famo) matcht: fa(me|ro). Es ist wichtig, die Anzahl und Position der Klammern zu reflektieren. Befindet sich der senkrechte Strich außerhalb runder Klammern so wird er alles, was sich links von ihm befindet mit allem, was sich rechts von ihm befindet in eine oder-Relation. Grenzen können ihm dadurch gesetzt werden, dass er, die Zeichenfolge links und die Zeichenfolge rechts in runde Klammern gesetzt werden. Wie im Schulunterricht beim Eintippen von Rechenoperationen mit Brüchen, sollte man im Zweifelsfall lieber mehr Klammern verwenden, da sich so besser überwachen lässt, welche Zeichenfolgen von demOperator geodert werden. Die folgende Darstellung dient der Veranschaulichung der Funktionsweise des senkrechten Striches in Kombination mit den gruppierenden Klammern. Ob Ausdruck a oder b zu verwenden ist, hängt von dem Standard des Editors/ des verwendeten Programms ab. Sollte ein Ausdruck nicht funktionieren, kann das Problem möglicherweise gelöst werden, indem Backslashes hinzugefügt oder getilgt werden.

Ausdruck aAusdruck bmatcht...
fame|rofame\|roENTWEDER (fame) ODER (ro)
fa(me)|(ro)fa\(me\)\|\(ro\)ENTWEDER (fame) ODER (ro)
fa(me|ro)fa\(me\|ro\)ENTWEDER (fame) ODER (faro)
fa((me)|(ro))fa\(\(me\)\|\(ro\)\)ENTWEDER (fame) ODER (faro)
fame|farofame\|faroENTWEDER (fame) ODER (faro)
(fame)|(faro)\(fame\)\|\(faro\)ENTWEDER (fame) ODER (faro)

Mit diesen Metazeichen kann nun auch ein Ausdruck Mithilfe dieser beiden Metazeichen können komplexere Ausdrücke formuliert werden, wie zum Beispiel derjenige, der auf ce n' est pas, c' est pas, ce n'est pas und c'est pas passt. Strategisch Hierfür macht es strategisch Sinn, Zeichenfolgen, deren Position sich in allen gewünschten Ergebnissen entspricht, außerhalb der runden Klammern, welche oder-Operatoren enthalten werden, zu setzen. Der erste Schritt sähe somit folgendermaßen aus:

...

Innerhalb der gesetzten Klammer sehen die Möglichkeiten nun wie folgt aus:

     Ergebnis
1a)e_n' c(e n'_)est pas
1b)e_n'_c(e n')est pas
2a)'   c(')est pas
2b)'_  c('_)est pas

Alle Unterschiede in den Ergebnissen lassen sich nun auch kleinschrittig beschreiben. Auch hier werden gemeinsame Zeichen(folgen) außerhalb der Klammer mit dem oder-Operator notiert.

Der Unterschied zwischen 1a) und 1b) betrifft das Leerzeichen. Alles andere sollte sich folglich außerhalb der Klammer befinden (Gemeinsamkeiten sind in der Tabelle blau unterlegt, Unterschiede rot): (e_n'(|_))

Die Menge an Zeichen auf einer Seite des senkrechten Striches kann wie in diesem Beispiel auch leer sein. (|_) ist gleichbedeutend mit "ENTWEDER nichts ODER Leerstelle".

Der Unterschied zwischen 2a) und 2b) liegt ebenfalls im Leerzeichen. Die Herangehensweise entspricht der vorausgehenden (Gemeinsamkeiten sind in der Tabelle grün unterlegt, Unterschiede rot): ('(|_))

Die beiden Teilausdrücke lassen sich nun mithilfe des oder-Operators verbinden und in c()est pas einfügen: c((e_n'(|_))|('(|_)))est pas

###

Die Ersetzfunktion

Die Klammern erweisen sich als überaus hilfreich, arbeitet man mit der Ersetzfunktion eines Texteditors (Die Funktion "Ersetzen" befindet sich meist irgendwo in der Nähe der Funktion Suchen "Suchen". Bei Notepad/ Textpad sind beide unter dem Menüpunkt "Suchen"/ "Search" gelistet). Diese Funktion ist insofern sinnvoll, als dass sie die Möglichkeit eröffnet, Textdaten und ihm zugrundeliegende Muster aktiv zu manipulieren.

Eine einfache Ersetz-Operation bestünde beispielsweise darin, alle Formen des Farbadjektivs rosso in einem Text durch die Nennform rosso zu ersetzen.Ein regulärer Ausdruck zum Auffinden aller Formen könnte dabei so lauten:

Ausdruckmatcht...
ross[oaie]rosso, rossa, rossi, rosse

Im "Ersetzen durch"-Feld wird nun die überschreibende Form definiert, hier rosso.

Ausdruckmatcht...Ersetzen durch...Ergebnis
ross[oaie]rosso, rossa, rossi, rosserossorosso, rosso, rosso, rosso

Eine weitere Aufgabe wäre zum Beispiel das Ersetzen der Formen von rosso durch entsprechende Formen von giallo (sprich: giallo, gialla, gialli, gialle). Auch diese lässt sich einfach lösen, indem man den Endvokal im regulären Ausdruck ignoriert und nur das lexikalische Morphem ersetzt. Alternativ lässt sich jedoch auch mit den runden Klammern arbeiten:

Ausdruckmatcht...Ersetzen durch...Ergebnis
rossross, ross, ross, rossgiallgiallo, gialla, gialli, gialle

ross([oaie])

oder:

ross\([oaie]\)

rosso, rossa, rossi, rossegiall\1giallo, gialla, gialli, gialle

Während die erste Lösung wahrscheinlich einleuchtet, bedarf die zweite einer weitergehenden Erklärung: Allen Inhalten, die sich in runden Klammern befinden, wird im Rahnen eines Ersetzvorgangs eine Kennzahl zugeordnet. Der Inhalt der ersten Klammer erhält die Kennzahl 1, der der zweiten 2, der der dritten 3 und so weiter. In dem vorliegenden Beispiel besteht der Inhalt entweder aus dem Buchstaben o, a, i oder e. Dieser Inhalt kann nun als Zeichen (bzw. Zeichenkette) in die ersetzende Form mithilfe der Kombination von Backslash und der entsprechenden Kennzahl übernommen werden.

Dies funktioniert folgendermaßen. Der Ausdruck ross([oaie]) sucht nach einer Zeichenfolge, auf die das Muster ross[oaie] passt, trifft zuerst auf rossa und setzt \1 mit a gleich. Nun wird rossa durch giall gefolgt von \1 (also a) ersetzt. Der Ausdruck sucht nun nach dem nächsten Match, z.B. rossi. Auch hier wird i mit \1 gleichgesetzt, bevor rossi durch giall\1 ersetzt wird.

Was hier verdeutlicht werden soll, ist, dass der Backslash mit der Kennzahl keinen Platzhalter übernehmen, sondern das jeweils konkrete Zeichen.

 

Scrollbar