Reguläre Ausdrücke - Tutorial Teil 2: Gruppieren und Wiederholungen

 

1 Kommentar | Kommentar schreiben | Bewerten | Artikel melden

 

Typ

Tutorial für Anfänger

Kategorie

Tools & Nützliches

Sprache

Deutsch

Autor

Stefan Trost Media

Eintrag

11.07.2011

Bewertungen

121

Views

4678
 
 


Über den Autor

Stefan Trost ist Entwickler von Software und Weblösungen. Gerne programmiert er auch individuelle Programme oder Internetseiten für Sie. Kontakt

Profil von Stefan Trost Media
Artikel von Stefan Trost Media

In diesem zweiten Teil unseres Tutorials kümmern wir uns um einfache Zeichenketten und Wiederholungen von Zeichen. Im ersten Teil haben wir die Einsatzbereiche von regulären Ausdrücken und die Metazeichen Sternchen *, Punkt . und Plus + besprochen. Diese Teile sind bisher 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 Beispiel auszutesten und selber mit regulären Ausdrücken herumzuprobieren, können Sie das Programm Text Konverter in der Basic Version benutzen. Wie Sie das Programm verwenden, wird im ersten Teil des Tutorials erklärt.

Einfache Zeichenketten

Auch die einfache Zeichenkette "abc" aus dem ersten Beispiel im Kasten kann als regulärer Ausdruck verwendet werden. Dieser Ausdruck enthält keine Metazeichen sondern nur einfache Buchstaben, daher werden auch nur alle Vorkommnisse von "abc" gefunden und durch "X" ersetzt.

Beispiel 1

Suchen nach:      abc         Original:          aba abcdef

Ersetzen durch:   X           Nach Ersetzung:    aba Xdef

 

Beispiel 2

Suchen nach:      abc+        Original:          aba abcdef abccc

Ersetzen durch:   X           Nach Ersetzung:    aba Xdef X

 

Beispiel 3

Suchen nach:      abc*        Original:          aba abcdef abccc

Ersetzen durch:   X           Nach Ersetzung:    Xa Xdef X

 

Beispiel 4

Suchen nach:      abc.        Original:          aba abcdef abccc

Ersetzen durch:   X           Nach Ersetzung:    aba Xef Xc

Hier ergibt sich in gewisser Weise eine Überschneidung zwischen dem normalen Ersetzen von Zeichenketten und den regulären Ausdrücken. Interessanter wird es erst, wenn wir "abc" mit einigen bekannten Metazeichen kombinieren. Das haben wir in den nächsten Beispielen gemacht.

Im Beispiel 2 kombinieren wir das "abc" mit einem Plus. Hier muss man beachten, dass sich das Plus immer auf das Zeichen davor bezieht. Das ist in diesem Fall nur das c und nicht die gesamte Gruppe "abc". Das c muss also mindestens einmal und kann auch mehrfach vorkommen, damit die Zeichenkette auf unseren regulären Ausdruck passt. Genau das geschieht in dem Beispiel. Im Original passen einmal "abc" in der Mitte und "abccc" am Ende der Zeichenkette. Beides wird durch ein X ersetzt und es ergibt sich die Zeichenkette "aba Xdef X".

Im Beispiel 3 sehen wir, was passiert, wenn wir statt dem Plus + ein Sternchen * benutzen. Das Sternchen bedeutet, dass das Zeichen vor dem Sternchen beliebig oft, auch kein mal vorkommen darf. Dieses Suchmuster passt wieder auf "abc" und "abccc" aus dem zweiten Beispiel, aber dieses Mal auch nur auf "ab" in "aba" am anfang. Denn das c kann vorkommen, muss es aber nicht. Es ergibt sich "Xa Xdef X".

Das dritte Metazeichen, das wir bislang kennen gelernt haben, ist der Punkt. Der Punkt steht für ein beliebiges Zeichen. Es wird also nach einer Zeichenkette gesucht, die mit "abc" beginnt und der vierte Buchstabe ist egal. Im Original treffen "abcd" und "abcc" auf dieses Muster zu. Es ergeben sich zwei Ersetzungen.

Gruppieren

Im letzten Abschnitt haben wir gesehen, dass sich die Metazeichen immer nur auf das letzte Zeichen vor dem Metazeichen beziehen. Oftmals haben wir aber mehrere Zeichen oder Gruppen von Zeichen, die sich wiederholen sollen. Hier hilft das Gruppieren von Zeichen.

Beispiel 5

Suchen nach:      (ab)+      Original:      ababab abcde ccabc

Ersetzen durch:   X          Ersetzt:       X Xcde ccXc

 

Beispiel 6

Suchen nach:      (ab)*      Original:      aba abcdef abccc

Ersetzen durch:   X          Ersetzt:       XX XXcXdXeX XcXcXXcXX

Wenn Sie eine Gruppe von Zeichen gruppieren wollen, können Sie dies mit den runden Klammern ( und ) machen. In den Beispielen 5 und 6 haben wir eine  Gruppe um "ab" gebildet. Damit beziehen sich die Metazeichen + und * nicht mehr nur auf das "b" sondern auf die gesamte Gruppe "ab".

Im Beispiel 5 muss damit "ab" mindestens einmal oder auch mehrmals vorkommen. Gefunden wird einmal "ababab" und einmal "ab". Beide werden durch "X" ersetzt. In Beispiel 6 darf "ab" mehrfach aber auch keinmal vorkommen. Das Ergebnis ist vielleicht überraschend. Gefunden werden die beiden Stellen aus Beispiel 5 aber auch jede andere beliebige Stelle, an der kein "ab" vorkommt. Dies zeigt dass man bei regulären Ausdrücken durchaus vorsichtig sein muss, denn vielleicht hätte man gedacht, dass sich Beispiele 5 und 6 nicht wirklich unterscheiden.

Wiederholungen

Bis jetzt hatten wir nur einfache Arten von Wiederholungen mit den Metazeichen Plus und Sternchen kennen gelernt. Kann man nun auch sagen, dass sich eine Zeichenkette eine bestimmte Anzahl oft wiederholen kann? Ja, man kann. Es geht. Man kann dafür die geschweiften Klammern { und } verwenden. Die Klammer bezieht sich wieder nur auf das letzte Zeichen vor der Klammer und in die Klammer notiert man, wie oft sich dieses Zeichen wiederholen muss.

Beispiel 7

Suchen nach:     ab{2}        Original:    abbcd fababcde abababg

Ersetzen durch:  X            Ersetzt:     Xcd fababcde abababg

 

Beispiel 8

Suchen nach:     (ab){2}      Original:    abbcd fababcde abababg

Ersetzen durch:  X            Ersetzt:     abbcd fXcde Xabg

 

Im Beispiel 7 verwenden wir den regulären Ausdruck ab{2}. Es soll also erst ein a kommen und danach soll sich das b zweimal wiederholen. Genau so ist es dann auch. Der Teil "abb" wird ersetzt und der Teil "abab" wird nicht ersetzt.

Wie wir das hinbekommen, zeigt Beispiel 8. Hier haben wir mit runden Klammern "ab" zusammengefasst und damit bezieht sich die zweifache Wiederholung auf diese gesamte Gruppe. Das erste "abb" trifft also nicht mehr zu, dafür das "abab" in der Mitte. Am Ende wiederholt sich "ab" in "abababg" dreimal. Ersetzt werden dort aber nur die ersten beiden Vorkommnisse, denn wir suchen ja schließlich alle "ab", die sich genau zweimal wiederholen.

Beispiel 9

Suchen nach:     a{2,4}       Original:    abc aabcaaad aaaajaaaaa

Ersetzen durch:  X            Ersetzt:     abc XbcXd XjXa

 

Beispiel 10

Suchen nach:     a{2,}        Original:    abc aabcaaad aaaajaaaaa

Ersetzen durch:  X            Ersetzt:     abc XbcXd XjX

 

Beispiel 11

Suchen nach:     a{,4}        Original:    abc aabcaaad aaaajaaaaa

Ersetzen durch:  X            Ersetzt:     Xbc XbcXd XjXa

Es geht aber auch etwas allgemeiner. In Beispiel 9 verwenden wir a{2,4}. Dies bedeutet, dass das "a" mindestens zweimal und maximal vier mal vorkommen soll. Ein einzelnes "a" wird demnach ebenso wenig gefunden wie mehr als vier "a". "abc" passt nicht auf das Suchmuster, dafür aber "aa" und "aaa" im Mittelteil der Zeichenkette. Am Ende werden die ersten vier "a" ersetzt und von den letzten 5 nur die ersten vier, so dass "jaaaaaa" zu "jXa" wird.

Sie können auch entweder die erste oder die zweite Zahl weglassen. Im Beispiel 10 a{2,} bedeutet der reguläre Ausdruck: Das "a" muss mindestens zweimal vorkommen und darf so oft vorkommen wie es will, denn die obere Einschränkung einer Maximalanzahl gibt es hier nicht. Es wird demnach fast genauso wie in Beispiel 9 ersetzt, nur dass dieses Mal auch die letzten fünf a "aaaaaa" gefunden werden und als ganzes durch ein "X" ersetzt werden.

Was passiert, wenn man die erste Zahl weglässt, sehen Sie in Beispiel 11. Der reguläre Ausdruck a{,4} bedeutet: Das a darf maximal vier Mal vorkommen, aber auch weniger. Ersetzt werden also alle Vorkommnisse mit einem "a", mit zwei "aa", mit drei "aaa" und mit vier "aaaa". Einige Programme inklusive dem Text Konverter unterstützen diesen Ausdruck nicht, da man den selben Sachverhalt besser und eindeutiger mit {0,4} beziehungsweise {1,4} ausdrücken kann.

Entsprechungen bisher bekannter Metazeichen

Vielleicht ist Ihnen aufgefallen, dass unsere bisher betrachteten Metazeichen Punkt und Sternchen auch mit den geschweiften Klammern { und } ausgedrückt werden können. Das Plus + entspricht demnach dem Ausdruck {1,} und das Sternchen * dem Ausdruck {0,}. Die Zeichen können also beliebig häufig vorkommen, aber beim Plus mindestens einmal und beim Sternchen auch kein mal.

Zusammenfassung

  • Zeichen, die keine Metazeichen sind, wie zum Beispiel a,b oder c können einfach in regulären Ausdrücken verwendet werden
  • Mit runden Klammern können wir einen Teil eines regulären Ausdrucks gruppieren. Damit lassen sich zum Beispiel Metazeichen wie Plus oder Sternchen, die sich sonst nur auf das vorangehende Zeichen beziehen, auf mehrere Zeichen anwenden
  • Geschweifte Klammern hingegen geben an, wie oft sich das Zeichen vor der geschweiften Klammer wiederholen soll. {2} bedeutet exakt zweimal, {2,5} mindestens zweimal und maximal fünf mal (also 2, 3, 4 oder 5 mal), {2,} mindestens zweimal und {,5} maximal fünf mal.

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

1 Kommentar wurde zu diesem Artikel abgegeben. Einige Kommentare können noch nicht sichtbar sein, weil sie erst freigeschaltet und geprüft werden müssen.

In Beispiel 6 ist schon der erste(?) Fehler:

Suchen nach: (ab)*
Original: aba abcdef abccc

Ersetzen durch: X
Ersetzt: XX XXcXdXeX XcXcXXcXX

definitiv falsch, wo bleibt a, f?

(Notepad++): XaX XcXdXeXfX XcXcXcX
21.07.2015 17:10