Gruppen in regulären Ausdrücken

In regulären Ausdrücken lassen sich Teilausdrücke in runde Klammen setzen und diese bilden dann Gruppen; im Englischen heißen sie capturing groups. Gruppen haben zwei Vorteile:

· An die Gruppe gesetzte Operationen wirken für die Gruppe. Beispiel: Der Ausdruck (\d\d)+ steht für gerade Anzahl von Ziffern.

· Auf eine Gruppe lässt sich gezielt zurückgreifen.

Beispiel 1

Ein String enthält zwei Zahlen, die mit einem Doppelpunkt getrennt sind. Wie interessieren uns für die erste und zweite Zahl:

Matcher matcher = Pattern.compile( "(\\d+):(\\d+)").matcher( "1:123" );

if ( matcher.find() )

System.out.println( matcher.group(1) + "," + matcher.group(2) ); // 1,123

Der Trick ist also, bei group(int) einen Index anzugeben; der beginnt bei 1.

Beispiel 2

Ein String aus einer Datei enthält einen Block in geschweiften Klammen. Wir interessieren uns für den Block.

String input = "line1\n{line2\nline3}\nline4";

Matcher matcher = Pattern.compile( "\\{(.*)\\}", Pattern.MULTILINE | Pattern.DOTALL ).matcher( input );

if ( matcher.find() )

  System.out.println( matcher.group( 1 ) ); // line1, dann Umbruch, line2

Bei der Angabe ohne Index, also group(), ist die Rückgabe alles was find() gefunden hat. Die Fundstellen sind natürlich Teilstrings der gesamten Gruppe.

Ähnliche Beiträge

Veröffentlicht in Insel

3 Gedanken zu “Gruppen in regulären Ausdrücken

  1. Kann es sein, dass in der Bloggingsoftware doppelte Backslashes zu einfachen werden (bzw. einfache gelöscht) in den Beiträgen 😀 ?

    Wenns auch bei den Kommentaren der Fall ist, ist bei nachfolgendem überall ein Backslash voran zu denken ^^

    \\d -> \d
    \n -> n
    \\{ -> \{

  2. Nutzt du Android? Mir fällt gerade auf, dass es mit dem Chrome auf Windows OK ist, aber bei mir auf dem Samsung Tablet auch falsch ist. In der mobilen Ansicht und normalen. Ist ein Fehler.

  3. Hallo Christian,

    aufgefallen ist es mir nicht auf einem Android-Device sondern in Chrome auf Ubuntu. Habe eben aber auch mal auf meinen Android-Devices nachgeschaut. In Chrome auf dem Lifetab mit Android 4.0.3 und auf dem Desire mit Android 2.2.2 gleiches Problem.

    Übrigens habe ich das Problem in den Kommentaren nicht! Weiter aufgefallen ist mir auch, dass auf der Übersichtsseite (http://www.tutego.de/blog/javainsel/) das Problem nicht auftaucht, hier wird alles korrekt dargestellt!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.