Das Objekt-Modell in .NET – Überblick
(Auszug aus "Reguläre Ausdrücke" von Jeffrey E. F. Friedl)
Bevor wir ins Detail gehen, betrachten wir den generellen Aufbau der Objekte im Regex-Paket von .NET, das Objekt-Modell. Dies ist ein Satz von Klassen und Objekten, mit denen die Funktionalität der regulären Ausdrücke implementiert wird. Beim Regex-Paket von .NET handelt es sich um sieben eng miteinander verwobene Klassen. Von diesen braucht man in der Praxis im Allgemeinen nur die drei in der folgenden Abbildung dargestellten Klassen. Die Abbildung illustriert die Anwendung der Regex ˹\s+(\d+)˼ auf den String ›May●16,●1998‹.
Abbildung: Das Objekt-Modell in .NET.
Regex-Objekte
Im ersten Schritt muss ein Regex-Objekt erzeugt werden:
Dim R as Regex = New Regex("\s+(\d+)")
Wir haben nun ein Regex-Objekt in R gespeichert, das die Regex ˹\s+(\d+)˼ darstellt. Ein Regex-Objekt kann man mit seiner Match(Text)-Methode auf einen String anwenden. Man erhält auf diese Weise Informationen über den ersten gefundenen Treffer:
Dim M as Match = R.Match("May 16, 1998")
Match-Objekte
Die Match(...)-Methode des Regex-Objekts liefert die Treffer-Informationen wieder als Objekt, als Match-Objekt. Match-Objekte haben eine Reihe von Eigenschaften, besonders auch Success (»Erfolg«, ein boolescher Wert, der besagt, ob überhaupt ein Treffer gefunden wurde) und Value (»Wert«, im Erfolgsfall eine Kopie des gefundenen Treffertextes). Später werden wir noch weitere Eigenschaften kennenlernen.
Wenn eine Regex einfangende Klammern besitzt, werden auch darüber Informationen zurückgegeben. In den Perl-Beispielen in den früheren Kapiteln hatten wir den Text aus dem ersten Klammerpaar in der Variablen $1 erhalten. In .NET gibt es dafür zwei Möglichkeiten: Wenn man nur am Text interessiert ist, der von den Klammern eingefangen wurde, kann man die Groups-Eigenschaft des Match-Objekts indizieren und erhält so mit Groups(1).Value die Entsprechung zu $1 in Perl. (In C# müssen eckige Klammern verwendet werden, also Groups[1].Value.) Man kann stattdessen auch die Result-Methode verwenden, siehe MatchObj.Result(String).
Group-Objekte
Mit Groups(1) wurde im letzten Abschnitt eigentlich ein Group-Objekt verwendet, und mit dem .Value wurde eigentlich dessen Value-Eigenschaft abgefragt (der Text, den die Klammer eingefangen hat). Es gibt für jedes einfangende Klammerpaar ein solches Group-Objekt und ein weiteres mit der Nummer 0 für den Gesamttreffer.
MatchObj.Value und MatchObj.Groups(0).Value sind also dasselbe – sie enthalten den gesamten Treffertext. Die erste Formulierung ist kürzer und in einem gewissen Sinn richtiger, aber man muss die »nullte« Gesamttreffergruppe dennoch kennen, weil sie bei MatchObj.Groups.Count mitgezählt wird (die Anzahl der Gruppen des Match-Objekts). Wenn ˹\s+(\d+)˼ passt, ist das resultierende MatchObj.Groups.Count gleich 2 (der Gesamttreffer und die $1-Gruppe).
Capture-Objekte
Es gibt außerdem Capture-Objekte (to capture, einfangen). Diese werden unter Capture-Objekte besprochen.
Alle Resultate werden beim Match berechnet
Wenn eine Regex auf einen String angewandt wird, wird ein Match-Objekt erzeugt, und die gesamten Trefferdaten (an welcher Stelle der Treffer auftritt, welche einfangenden Klammern daran teilhaben usw.) werden bei diesem Schritt berechnet und im Match-Objekt verkapselt. Wenn man später dessen Eigenschaften oder die Eigenschaften der entsprechenden Group-Objekte abfragt oder deren Methoden benutzt, dann werden eigentlich nur diese Resultatwerte abgeholt, die schon vorher bei der Mustersuche berechnet wurden.
<< 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