Das Matcher-Objekt

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

Wenn der reguläre Ausdruck mit dem Suchstring verbunden ist, kann man die Regex auf verschiedene Arten anwenden und die Resultate auswerten. Zu einem Matcher-Objekt m wird die Regex mit dem Aufruf von m.find() auf den Suchstring angewandt, und die Methode gibt einen Wahrheitswert zurück, der besagt, ob ein Treffer erzielt wurde. Bei einem Treffer ergibt ein Aufruf von m.group() den gefundenen Treffertext.

Bevor wir uns mit den Details der verschiedenen Matcher-Methoden befassen, gebe ich eine Übersicht über die Daten, die vom Matcher verwaltet werden. Die folgenden Listen enthalten bei jedem Punkt Seitenverweise zu den Details. In der ersten Liste geht es um Dinge, die der Programmierer verändern kann, in der zweiten um Daten, die nur gelesen werden können.

Dinge, die der Programmierer setzen und verändern kann:

  • Das Pattern-Objekt, das der Programmierer beim Erzeugen des Matchers angibt. Mit der usePattern()-Methode kann ein anderes Pattern-Objekt angegeben werden (siehe Matcher usePattern(Pattern p)). Die Methode pattern() liefert das aktuelle Pattern-Objekt zurück.
  • Der Suchtext (ein String oder irgendeine CharSequence), der bei der Konstruktion des Matchers angegeben wurde, kann mit der reset(text)-Methode gegen einen anderen ausgetauscht werden (siehe Matcher reset(CharSequence text)).
  • Die Region im Suchtext (siehe Die Region des Matchers). Normalerweise umfasst die Region den gesamten Suchtext, aber mit der region-Methode kann der Programmierer die Region auf einen Bereich des Suchtexts einschränken. Die meisten (aber nicht alle) Match-Funktionen suchen dann nur noch in diesem Bereich.

    Mit den Methoden regionStart und regionEnd kann man die Anfangs- und End-Offsets der aktuellen Region abfragen (siehe Setzen und Abfragen der Regionsgrenzen). Die reset-Methode (siehe Matcher reset()) setzt die gewählte Region auf den ganzen Suchtext; das tun auch die Methoden, die intern reset verwenden (siehe Weitere Matcher-Methoden).

  • Die Option anchoring bounds (»Anker-Grenzen«). Wenn die gewählte Region nicht mit dem gesamten Suchtext übereinstimmt, kann mit dieser Option angegeben werden, ob der Anfang und das Ende der Region in Bezug auf die Zeilengrenzen-Metazeichen (\A ^ $ \z \Z) als »Stringanfang« und »Stringende« gelten sollen.

    Die Option ist normalerweise gesetzt; mit hasAnchoringBounds kann ihr Wert abgefragt und mit useAnchoringBounds (siehe Anker-Grenzen (anchoring bounds)) verändert werden. Die reset-Methode verändert den Wert dieses Flags nicht.

  • Die Option transparent bounds (»durchsichtige Grenzen«). Wenn die gewählte Region nur ein Teil des Suchtexts ist, kann mit dieser Option angegeben werden, ob die »Look«-Konstrukte (Lookahead, Lookbehind und Wortgrenzen) über die Grenzen der Region »hinausblicken« sollen.

    Die Option ist normalerweise nicht gesetzt; mit hasTransparentBounds kann der Wert abgefragt und mit der Methode useTransparentBounds kann er gesetzt werden (siehe Durchsichtige Regionsgrenzen). Die reset-Methode verändert den Wert dieses Flags nicht.

Die folgenden Daten des Matchers können nur abgefragt, aber nicht mit einer set-Methode verändert werden:

  • Die Anzahl von einfangenden Klammerpaaren in der aktuellen Regex kann mit der groupCount-Methode abgefragt werden (siehe int groupCount()).
  • Die aktuelle Position im Suchtext, die für die »Weitersuchen«-Funktionalität der find-Methode benötigt wird (siehe boolean find()).
  • Die Anfügeposition im Suchtext. Ab dieser Stelle wird beim Suchen und Ersetzen der Rest des Suchtexts in den Resultatstring kopiert (siehe unter Suchen und Ersetzen im Detail).
  • Ein Flag, das angibt, ob bei der letzten Suche – ob erfolgreich oder nicht – das Ende des Suchstrings erreicht wurde. Die hitEnd-Methode gibt den Wert dieses Flags zurück (siehe boolean hitEnd()).
  • Das Resultat der Mustersuche. Bei einem erfolgreichen Matching-Versuch bezeichnet man die verschiedenen Werte des Treffers als Resultat (siehe Resultate abfragen). Dieses umfasst den eigentlichen Treffertext (mit der group()-Methode) und die Anfangs- und End-Indizes dieses Treffers im Suchtext (mit den Methoden start() und end()); außerdem die entsprechenden Daten für jedes einfangende Klammerpaar (mit den Methoden group(num), start(num) und end(num)).

    Das komplette Resultat kann mit der toMatchResult-Methode als MatchResult-Objekt abgespeichert werden. Ein MatchResult-Objekt hat seine eigenen group-, start- und end-Methoden, die ganz analog wie die des Matchers funktionieren (siehe MatchResult toMatchResult()).

  • Ein Flag, das angibt, ob ein längerer Suchtext zu einem Fehlschlag geführt haben könnte (auch dieses Flag hat nur nach einer erfolgreichen Mustersuche einen gültigen Wert). Das Flag wird gesetzt, wenn am Ende des Treffers ein Zeilengrenzen-Metazeichen gepasst hat. Man kann es mit der Methode requireEnd abfragen (siehe boolean requireEnd()).

Diese Aufzählung ist sehr gedrängt und schwer verständlich, die einzelnen Punkte werden aber klarer, wenn die Methoden nach ihrer Funktion geordnet besprochen werden. Das geschieht in den nächsten Abschnitten. Die Tabelle der Methoden zu Anfang des Kapitels (siehe die Tabelle Index der Methoden aus java.util.regex, alphabetisch sortiert) hilft Ihnen beim Navigieren.

  

  

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