Resultate abfragen

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

Mit den folgenden Matcher-Methoden kann man nach einer erfolgreichen Mustersuche die Trefferdaten abfragen. Wenn die Regex noch gar nicht angewandt wurde oder wenn die letzte Anwendung einen Fehlschlag ergab, wird IllegalStateException ausgelöst. Bei den Methoden, die eine Zahl als Argument haben können (das die Nummer der einfangenden Klammer angibt), wird IndexOutOfBoundsException ausgelöst, wenn eine ungültige Zahl angegeben wird.

Beachten Sie, dass sich die Offsets, die die Methoden start und end zurückgeben, auf den Anfang des Suchstrings beziehen, nicht auf den Anfang der aktuellen Region.

Nach der Liste der Resultat-Methoden finden Sie ein Programmbeispiel, das deren Gebrauch illustriert.

String group()

Liefert den Treffertext der letzten Mustersuche.

int groupCount()

Gibt die Anzahl der einfangenden Klammerpaare in der Regex des Objekts zurück. Bei group, start und end können Zahlen bis zu diesem Limit angegeben werden. (Anmerkung: Die Methode groupCount kann immer aufgerufen werden; die anderen hier behandelten Methoden nur nach einer erfolgreichen Mustersuche.)

String group(int num)

Ergibt den Text, der vom num-ten einfangenden Klammerpaar aufgefangen wurde, oder null, wenn dieses Klammerpaar nicht Teil des Treffers war. Mit 0 für num bekommt man die Daten für den ganzen Treffer; group(0) ist also gleichbedeutend mit group().

int start(int num)

Liefert den Offset (die Anzahl der Zeichen) vom Anfang des Strings bis zum Anfang des Textstücks, auf das die num-te Klammer gepasst hat. Wenn das Klammerpaar nicht Teil des Treffers war, wird -1 zurückgegeben.

int start()

Der Offset bis zum Anfang des Treffers; dasselbe wie start(0).

int end(int num)

Liefert den Offset (die Anzahl der Zeichen) vom Anfang des Strings bis zum Ende des Textstücks, auf das die num-te Klammer gepasst hat. Wenn das Klammerpaar nicht Teil des Treffers war, wird -1 zurückgegeben.

int end()

Der Offset bis zum Ende des Treffers; dasselbe wie end(0).

MatchResult toMatchResult()

Seit Java 1.5 gibt es die toMatchResult-Methode, die die Trefferdaten der letzten Mustersuche in einem MatchResult-Objekt zurückgibt. Es gibt dazu die gleichen Abfragemethoden wie bei der Matcher-Klasse, also group, start, end und groupCount.

Wenn toMatchResult aufgerufen wird, obwohl die letzte Mustersuche fehlgeschlagen ist (oder wenn noch gar nicht gesucht wurde), wird die Ausnahme IllegalStateException ausgelöst.

Programmbeispiel: Match-Resultate

Das folgende Programmbeispiel soll zeigen, wie die Methoden zur Resultatabfrage verwendet werden. Zu einem gegebenen URL-String extrahiert das Programmstück den Protokollteil (›http‹ oder ›https‹), den Hostnamen und die (fakultative) Portnummer.

String url   = "http://regex.info/blog";
String regex = "(?x) ^(https?):// ([^/:]+) (?:(\\d+))?";
Matcher m = Pattern.compile(regex).matcher(url);
if (m.find())
{
  System.out.print(
      "Komplett  [" + m.group()  + "]" +
      " (von "      + m.start()  + " bis " + m.end()  + ")\n" +
      "Protokoll [" + m.group(1) + "]" +
      " (von "      + m.start(1) + " bis " + m.end(1) + ")\n" +
      "Hostname  [" + m.group(2) + "]" +
      " (von "      + m.start(2) + " bis " + m.end(2) + ")\n"
  );
  // Vorsicht, das 3. Klammerpaar ist vielleicht nicht Teil des Treffers.
  if (m.group(3) == null)
     System.out.println("Keine Portnummer; Voreinstellung ist '80'");
  else {
     System.out.print("Portnummer [" + m.group(3) + "] " +
                      "(von " + m.start(3) + " bis " + m.end(3) + ")\n");
  }
}

Das Programm gibt die folgenden Zeilen aus:

Komplett  [http://regex.info] (von 0 bis 17)
Protokoll [http] (von 0 bis 4)
Hostname  [regex.info] (von 7 bis 17)
Keine Portnummer; Voreinstellung ist '80'

  

<< 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