Die Regex anwenden
(Auszug aus "Reguläre Ausdrücke" von Jeffrey E. F. Friedl)
Hier die hauptsächlichen Matcher-Methoden, mit denen man die Mustersuche auslöst:
boolean find()
Wendet die Regex des Objekts auf den Suchstring des Objekts an und gibt einen booleschen Wert zurück, der einen Treffer anzeigt. Bei mehrmaligem Aufruf wird der jeweils nächste Treffer gefunden. Beim Aufruf von find() ohne Argumente wird die Suche auf die aktuelle Region (siehe Die Region des Matchers) beschränkt.
Hier ein einfaches Beispiel:
Das ergibt:
match [Mastering]
Wenn dagegen die if-Anweisung durch while ersetzt wird
while (m.find())
System.out.println("match [" + m.group() + "]");
geht das Programm den ganzen String durch und gibt alle Treffer aus:
match [Mastering]
match [Regular]
match [Expressions]
boolean find(int offset)
Wird find mit einer Zahl als Argument aufgerufen, wird die Regex nicht am Anfang des Strings, sondern offset Zeichen später angesetzt. Wenn der offset negativ oder größer als die Länge des Suchstrings ist, wird die Ausnahme IndexOutOfBoundsException ausgelöst.
Bei dieser Form der find-Methode wird die aktuelle Region nicht berücksichtigt, im Gegenteil, die Region wird vor der Suche auf den ganzen String gesetzt (indem intern reset aufgerufen wird, siehe Matcher reset()).
In Lösung 15 wird diese Form von find an einem Beispiel erläutert.
boolean matches()
Diese Methode gibt einen Wahrheitswert zurück, der angibt, ob die Regex vollständig auf die aktuelle Region (siehe Die Region des Matchers) passt. Ein Treffer muss am Anfang der Region beginnen und am Ende der Region aufhören. Wenn die Region den ganzen Suchstring umfasst – das ist die Voreinstellung –, läuft das auf dasselbe hinaus, als ob die Regex in ˹\A...\z˼ eingepackt wäre; eventuell ist es so praktischer.
Wenn sich die Region allerdings nur über einen Teil des Suchstrings erstreckt, kann man mit matches die ganze Region matchen, ohne sich um das Flag anchoring bounds zu kümmern (siehe Anker-Grenzen (anchoring bounds)).
Nehmen wir an, ein CharBuffer enthält den Text, den ein Benutzer gerade in einem Editor bearbeitet. Der Benutzer hat mit der Maus einen Bereich aus dem Text ausgewählt, diese Auswahl entspricht der Region. Wenn der Benutzer nun auf den ausgewählten Bereich klickt, kann mit m.usePattern(urlPattern).matches() geprüft werden, ob der Bereich der Syntax einer URL genügt (in diesem Fall würde eine bestimmte Aktion ausgelöst).
Diese Funktion ist auch mit der Methode matches() der String-Klasse zugänglich:
"1234".matches("\\d+"); // wahr
"123!".matches("\\d+"); // falsch
boolean lookingAt()
Gibt einen booleschen Wert zurück, der angibt, ob die Regex innerhalb der aktuellen Region gepasst hat, und zwar beginnend am Anfang der Region. Die Methode funktioniert also ähnlich wie matches, aber nur der Anfang des Treffers muss mit dem Anfang der Region übereinstimmen, nicht auch das Ende.
<< 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