Verwendung von java.util.regex

(Auszug aus "Reguläre Ausdrücke" von Jeffrey E. F. Friedl)

Die Art, wie reguläre Ausdrücke in java.util.regex gehandhabt werden, ist recht einfach. Das Package besteht nur aus zwei Klassen, einer Interface-Klasse und einer Exception:

java.util.regex.Pattern
java.util.regex.Matcher
java.util.regex.MatchResult
java.util.regex.PatternSyntaxException

Die ersten zwei Klassen bezeichne ich im Weiteren einfach als »Pattern« und »Matcher«. In vielen Fällen werden wir nur diese zwei verwenden. Das Pattern-Objekt ist ein kompilierter regulärer Ausdruck, der auf beliebige Strings angewendet werden kann. Bei jeder Anwendung eines solchen Ausdrucks wird ein Matcher-Objekt (eine Instanz davon) verwendet, das das Pattern-Objekt mit dem Suchstring verbindet.

Seit Java 1.5 gibt es die Klasse MatchResult, in der die Resultate einer erfolgreichen Mustersuche verkapselt sind. Diese Daten speichert auch das Matcher-Objekt, aber nur bis zur nächsten Suche; sie können als MatchResult abgespeichert werden.

Die Ausnahme PatternSyntaxException wird ausgelöst, wenn sich bei der Kompilierung der Regex Fehler ergeben, beispielsweise bei einem Syntaxfehler wie  ˹[hoppla)˼. Die Ausnahme ist von java.lang.IllegalArgumentException abgeleitet und wird nicht abgefangen.

Das folgende Programmbeispiel ist eine einfache Mustersuche:

public class SimpleRegexTest {
  public static void main(String[] args)
  {
    String beispielText  = "nur 1mal kurz testen.";
    String beispielRegex = "\\d+\\w+"; // entspricht \d+\w+
    java.util.regex.Pattern p = java.util.regex.Pattern.compile(beispielRegex);
    java.util.regex.Matcher m = p.matcher(beispielText);

    if (m.find()) {
       String trefferText  = m.group();
       int    trefferStart = m.start();
       int    trefferEnde  = m.end();
       System.out.println("Treffer [" + trefferText + "] "
                          "von " + trefferStart +
                          " bis " + trefferEnde + ".");
    } else {
       System.out.println("Kein Treffer.");
    }
  }
}

Das ergibt die Ausgabe ›Treffer [1mal] von 4 bis 8.‹. Wie bei allen Programmbeispielen in diesem Kapitel sind hier selbst gewählte Namen kursiv wiedergegeben. Die halbfett gedruckten Teile können weggelassen werden, wenn im Programmkopf

import java.util.regex.*;

verwendet wird, wie in den Beispielen unter Features und Dialekte (siehe Gebrauch von regulären Ausdrücken in Java).

Damit wird der Code übersichtlicher, und das ist auch die übliche Schreibweise. In den restlichen Beispielen in diesem Kapitel wird vorausgesetzt, dass diese import-Anweisung vorhanden ist.

Das Objektmodell von java.util.regex unterscheidet sich etwas vom üblichen Modell. Beachten Sie, wie im Beispielprogramm ein Matcher-Objekt m erzeugt wird, indem das Pattern-Objekt mit dem Suchstring verbunden wird; mit diesem Matcher-Objekt werden (mit der Methode find()) die Mustersuche ausgelöst und (mit den Methoden group(), start und end usw.) die Trefferdaten ausgelesen.

Diese Vorgehensweise erscheint etwas umständlich, aber wir werden uns schnell daran gewöhnen.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Reguläre Ausdrücke bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:
   

Copyright der deutschen Ausgabe © 2008 by O’Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Reguläre Ausdrücke" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstr. 81, 50670 Köln