Die Factory-Methode Pattern.compile
(Auszug aus "Reguläre Ausdrücke" von Jeffrey E. F. Friedl)
Ein Pattern-Objekt wird mit Pattern.compile erzeugt. Das erste Argument ist ein String, der als Regex interpretiert wird (siehe Strings in Java). Im zweiten Argument kann man die in der Tabelle Die Regex-Modi bei java.util.regex aufgeführten Kompilationsoptionen angeben. Das folgende Programmbeispiel erzeugt aus der Regex im String beispielRegex ein Pattern-Objekt, das ohne Rücksicht auf Groß- und Kleinschreibung angewendet werden soll.
Pattern pat = Pattern.compile(beispielRegex,
Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
Die symbolischen Konstanten aus Pattern für die Kompilationsoptionen sind etwas unhandlich und sperrig, (Anmerkung: Besonders bei Programmbeispielen in einem Buch mit begrenzter Zeilenlänge – ich spreche aus Erfahrung!) deshalb verwende ich meist die Modus-Modifikatoren innerhalb der Regex (siehe Der Modus »Groß- und Kleinschreibung ignorieren«). Beispiele für ˹(?x)˼ gibt es beim Programmbeispiel: Match-Resultate und mehrere für ˹(?i)˼ unter Hinzufügen von WIDTH- und HEIGHT-Attributen zu IMG-Tags in HTML.
Andererseits sind es gerade diese »sperrigen« ausgeschriebenen Symbole, die dem Anfänger das Verständnis erleichtern. Ohne die Einschränkung durch die Zeilenlänge würde ich für das zweite Argument von Pattern.compile aus Die Region des Matchers viel lieber
Pattern.UNIX_LINES | Pattern.CASE_INSENSITIVE
schreiben, statt ein möglicherweise unverständliches ˹(?id)˼ am Anfang in die Regex hineinzupacken.
Wie der Name der Methode nahelegt, wird in diesem Schritt der textuelle reguläre Ausdruck analysiert und in eine interne Form übersetzt. Unter Die Kunst, reguläre Ausdrücke zu schreiben wird dieser Schritt im Detail beschrieben (siehe Wie ein regulärer Ausdruck angewendet wird), hier genügt es zu wissen, dass diese Übersetzung in vielen Fällen der zeitaufwendigste Teil des ganzen Vorgangs ist, wenn eine Regex auf einen String angewandt wird. Gerade deshalb gibt es einen separaten Kompilier- und Such-Schritt – so kann man eine einmal kompilierte Regex wiederverwenden.
Wenn eine Regex nur ein einziges Mal verwendet wird, spielt das keine Rolle, aber wenn die gleiche Regex viele Male (z.B. auf jede Zeile einer Datei) angewandt wird, kann es sehr sinnvoll sein, die Regex nur einmal zu kompilieren.
Der Aufruf von Pattern.compile(...) kann zwei Arten von Ausnahmen auslösen: Eine syntaktisch unkorrekte Regex erzeugt PatternSyntaxException, und ungültige Optionswerte ergeben IllegalArgumentException.
Die matcher-Methode
Das Pattern-Objekt enthält auch einige »Komfort-Funktionen«, die wir später betrachten werden, aber im Allgemeinen wird die ganze Arbeit von einer einzigen Methode verrichtet: matcher. Sie erwartet ein einziges Argument: den String, der abgesucht werden soll. (Anmerkung: Das Argument zu matcher kann jede Art von Objekt sein, das dem Interface CharSequence genügt, zum Beispiel String, StringBuffer, CharBuffer und andere.) Die Regex wird damit noch nicht angewendet, es wird nur das Pattern-Objekt auf bestimmte Weise mit dem Suchstring in Verbindung gebracht. Die matcher-Methode gibt ein Matcher-Objekt zurück.
<< 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