Reguläre Ausdrücke - Tutorial Teil 7: Modifikatoren

 

0 Kommentare | Kommentar schreiben | Bewerten | Artikel melden

 

Typ

Tutorial für Anfänger

Kategorie

Tools & Nützliches

Sprache

Deutsch

Autor

Stefan Trost Media

Eintrag

13.07.2011

Bewertungen

60

Views

3788
 
 


Über den Autor

Stefan Trost ist Entwickler von Software und Weblösungen und kümmert sich auch gerne um Ihre individuellen Softwarewünsche oder Webauftritte. Kontakt

Profil von Stefan Trost Media
Artikel von Stefan Trost Media

In einigen, aber nicht allen, Programmen können so genannte Modifikatoren verwendet werden. Diese steuern und modifizieren das Verhalten von regulären Ausdrücken in der gewünschten Art und Weise. Ob Ihr Programm Modifikatoren unterstützt, müssen Sie selber ausprobieren. Das hier verwendete Programme, Text Konverter, unterstützt sie. Folgende Teile dieses Tutorials sind bislang erschienen:

Teil 1: Einführung und Grundlagen | Teil 2: Einfache Zeichenketten, Wiederholungen und Gruppieren | Teil 3: Metazeichen | Teil 4: Zeichenauswahl und alternative Zeichen | Teil 5: Zeichengruppen und Klassen | Teil 6: Wiederverwendung und Rückwärtsreferenzen | Teil 7: Modifikatoren | Teil 8: Anwendung und Beispiele

Wichtiger Hinweis

Um die Beispiele ausprobieren zu können und um selber reguläre Ausdrücke zu testen, können Sie die Software Text Konverter in der Basic Version benutzen. Im ersten Teil des Tutorials ist erklärt, wie dies funktioniert.

Anwendung von Modifikatoren

Bevor wir auf die einzelnen unterschiedlichen Modifikatoren eingehen, kurz einige Worte zu deren Benutzung und Anwendung. Leider werden die Modifikatoren nicht wirklich einheitlich verwendet. Manche Programme unterstützen sie, andere nicht. Da wir bis jetzt als Beispiel den Text Konverter verwendet haben, hier, wie man im Text Konverter die Modifikatoren benutzen kann:

Global können Sie unter dem Suchen und Ersetzen Feld auf "RegEx.." klicken. Es öffnet sich ein neues Fenster, in dem Sie die globalen Modifikatoren je nach Bedarf ein- und ausschalten können. Im selben Fenster können Sie auch benutzerdefinierte Zeichenklassen bestimmen.

Eine weitere Möglichkeit ist die Anwendung von Modifikatoren direkt im regulären Ausdruck. Diese wollen wir auch später in diesem Tutorial benutzen. Nehmen wir den regulären Ausdruck [a-z] und den Modifikator "i". Um diesen anzuwenden schreiben Sie "(?i)[a-z]. Sollen es mehrere Modifikatoren sein, schreiben Sie (?ims)[a-z]. Wenn Sie die Modifikatoren i und m einschalten und s abschalten möchten, verwenden Sie (?im-s)[a-z]. Sollen Modifikatoren nur auf Teile der regulären Ausdrücke angewendet werden geht dies so: ((?i)[a-z])[a-z].

In den weiteren Beispielen sehen Sie noch weitere Beispiele zum Einschalten und Ausschalten der Modifikatoren.

Modifikator i: Case Insensitive

Beispiel 1

Suchen nach:        Ersetzung: Original:           Nach Ersetzung:

[A-Z]               X          abcd ABCD           abcd XXXX

(?i)[A-Z]           X          abcd ABCD           XXXX XXXX

(?-i)[A-Z]          X          abcd ABCD           abcd XXXX

(?i)[A-Z](?-i)[A-Z] X          aB AB Ab            X X Ab

Der Modifikator i bestimmt ob zwischen Groß- und Kleinschreibung unterschieden werden soll oder nicht. Standardmäßig ist der Modifikator ausgeschaltet, daher wird standardmäßig zwischen "A" und "a" unterschieden. In der ersten Zeile wird mit den Standardeinstellungen nach [A-Z] gesucht und nur die Großbuchstaben werden ersetzt. In Zweile 2 aktivieren wir den Modifikator i, indem wir (?i) vorranstellen oder den Modifikator in den Optionen auswählen. Nun wird nicht mehr zwischen Groß und Kleinschreibung unterschieden und sowohl kleine als auch große Buchstaben werden ersetzt. Wenn Sie (?-i) vorranstellen, deaktivieren Sie den Modifikator i. Damit erzielen wir das selbe Ergebnis wie im Standard, da i standardgemäß ausgeschaltet ist.

Zuletzt schalten wir den Modifikator erst ein, dann kommt ein Buchstabe aus der Gruppe A bis Z und anschließend schalten wir den Modifikator wieder aus und möchten noch einen Buchstaben aus der Gruppe A bis Z. Das Ergebnis ist einleuchtend. Wir suchen eine Zweierkombination von Buchstaben. Der erste Buchstabe dieser Kombination kann groß oder klein sein, der zweite dagegen muss groß sein. Das trifft auf "aB" und "AB" zu, nicht aber auf "Ab".

Modifikatoren m und s: Multi Line und Single Line

Beispiel 2

Suchen nach:   Ersetzung:    Original:             Nach Ersetzung:

(?s-m)^.*$     X             Dieser Text geht      X

                             über mehrere Zeilen

(?m-s)^.*$     X             Dieser Text geht      X

                             über mehrere Zeilen   X

Die Modifikatoren m und s bestimmen, wie wir mit mehreren Zeilen in einem Textdokument umgehen. Der reguläre Ausdruck ^.*$ sucht alle Zeichen einer Zeichenkette von vorne nach hinten. ^ stand für den Beginn, $ für das Ende einer Zeichenkette. .* bedeutet, dass sich ein beliebiges Zeichen beliebig oft wiederholen kann.

Nun benutzen wir diesen Ausdruck und wenden ihn einmal mit dem Modifikator s (m ist ausgeschaltet) und einmal mit dem Modifikator m (s ist ausgeschaltet) an. Im Modus s wird die gesamte Datei als eine einzelne Zeile begriffen. Der gesamte mehrzeilige Text wird komplett gefunden und durch ein "X" ersetzt. Anders verhält es sich im Modus m. Hier wird nur jede einzelne Zeile angesehen. Die Metazeichen ^ und $ stehen hier für den Anfang und das Ende einer Zeile. Entsprechend wird in der ersten Zeile erst "Dieser Text geht" gefunden und durch ein "X" ersetzt und anschließend wird "über mehrere Zeilen" gefunden und durch ein "X" ersetzt. In jeder Zeile steht danach ein "X".

Modifikator g: Greedy Mode

Beispiel 3

Suchen nach:   Ersetzung:    Original:             Nach Ersetzung:

(?-g)a.+x      X             abcxfghixj            Xfghixj

(?g)a.+x       X             abcxfghixj            Xj

 

a.+x           X             abcxfghixj            Xfghixj

a.+?x          X             abcxfghixj            Xj

Der reguläre Ausdruck "a.+x" sucht eine Zeichenkette, die mit a beginnt und mit "x" endet. Dazwischen können beliebige andere Zeichen vorkommen. Gehört zu diesen beliebigen Zeichen aber auch ein "x" oder endet der Ausdruck sobald das erste "x" erscheint?

In unserem Beispiel 3 haben wir eine Zeichenkette die mit "a" beginnt und die einmal ein "x" in der Mitte und einmal ein "x" am Ende enthält. In der ersten Zeile ist der Greedy Mode deaktiviert. Nun findet der Ausdruck alle Zeichen bis zum ersten "x". Anders verhält es sich im Greedy Mode. Im Greedy Mode werden so viele Zeichen wie möglich gefunden und immer das letzte "x" genommen. Je nachdem, was für ein Ziel Sie verfolgen ist der aktivierte oder deaktivierte Greedy Mode die richtige Wahl für Sie.

Standardmäßig ist der Greedy Mode deaktiviert. Wenn Sie also den Ausdruck "a.+x" alleine verwenden, ergibt sich das bekannte Muster mit ausgeschaltetem Greedy Mode. Aber auch das Verhalten mit eingeschaltetem Greedy Mode kann man mit einem uns bekannten Metazeichen nachahmen. Man fügt zu jedem + oder * einfach ein ? hinzu und schon verhält sich der Ausdruck greedy, obwohl der Greedy Mode deaktiv ist.

Modifikator x: Extended Syntax

Der Modus x steht für extended Syntax und wird von den wenigsten Programmen unterstützt. Dieser Modifiator leistet nur einen Beitrag zur Lesbarkeit und zur Benutzerfreundlichkeit, spielt aber für die Interpretation von regulären Ausdrücken keine Rolle. Wenn x aktiviert ist, können Sie Whitespace wie Leerzeichen oder Absätze in Ihren regulären Ausrücken verwenden oder Kommentare mit # am Beginn einer Zeile hinzufügen. Da reguläre Ausdrücke (siehe im nächsten Teil) schnell sehr lang und sehr komplex werden können, ist der Modifikator x eine gute Möglichkeit, die Ausdrücke leichter zu verstehen. Sie müssen allerdings beachten dass in diesem Fall Whitespace wie Leerzeichen, die wirklich als ein Leerzeichen im regulären Ausdruck interpretiert werden sollen mit einem vorangehenden \ markiert werden müssen.

Kombination verschiedener Modifikatoren

Beispiel 4

Suchen nach:       Ersetzung:  Original:          Nach Ersetzung:

(?is-g)a[A-Z]*x    X           abcxfghixj         Xfghixj

In den bisherigen Beispielen haben wir immer nur ein Modus gleichzeitig ein oder ausgeschaltet. Sie können aber auch mehrere Modi gleichzeitig deaktivieren oder aktivieren. Im Kasten zeigen wir ein Beispiel dafür. Hier aktivieren wir den Modus i und den Modus s aber deaktivieren den Greedy Mode. Nun verhält sich der Ausdruck nicht greedy, unterscheidet aber nicht zwischen Groß und Kleinschreibung und betrachtet alles als eine Zeile. Dementsprechend sieht dann auch die Ersetzung aus. Sie reicht bis zu dem ersten "x" (nicht greedy) und obwohl zwischen a und z nur Kleinbuchstaben stehen, funktioniert der Ausdruck [A-Z] dafür.

Zusammenfassung

  • Modifikatoren ermöglichen es, reguläre Ausdrücke verschiedenartig zu interpretieren
  • Der Modifikator i schaltet die Unterscheidung zwischen Groß und Kleinschreibung ein und aus.
  • Die Modifikatoren m und s bestimmen ob eine Zeichenkette bestehend aus mehreren Zeilen als Gesamt-Zeichenkette oder als Gruppe von Zeichenketten (jede Zeile als einzelne Zeichenkette) betrachtet wird.
  • Der Modifikator g bestimmt ob das erste oder das letzte Vorkommnis eines abschließenden gesuchten Zeichens entscheidend ist.
  • Mit eingeschaltetem Modifikator x können Sie Leerzeichen und Kommentare zu regulären Ausdrücken hinzufügen, die nicht interpretiert werden. Damit werden die Ausdrücke leichter lesbar.
  • Modifikatoren können kombiniert werden und innerhalb eines regulären Ausdrucks ein- und ausgeschaltet werden

Lesen Sie weiter

 

© Stefan Trost - Die Verwendung dieses Tutorials, auch in Auszügen, ist nur nach vorheriger Genehmigung von Stefan Trost erlaubt. Sie können das Tutorial aber gerne verlinken.

 
  
 

Kommentare

Sind Sie der selben Meinung wie der Autor oder wollen Sie etwas ergänzen? Hier können Sie einen Kommentar hinterlassen.

Kommentar schreiben

Sie können zu diesem Artikel einen anonymen Kommentar hinterlassen. Möchten Sie unter Ihrem Namen schreiben, loggen Sie sich ein oder registrieren Sie sich.



Bisherige Kommentare

Zu diesem Artikel wurden bislang noch keine Kommentare abgegeben.