Beziehungen des Match-Operators zum Umfeld

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

Die folgenden Abschnitte fassen zusammen, wie der Match-Operator seine Umgebung beeinflusst und wie er von der Umgebung beeinflusst wird.

Nebeneffekte des Match-Operators

Oft sind die Nebeneffekte eines Matchings wichtiger als das eigentliche Resultat. Es kommt tatsächlich recht häufig vor, dass ein Match-Operator im Void-Kontext für sich allein steht, ohne dass das Resultat überprüft oder einer Variablen zugewiesen wird; er wird nur um der Nebeneffekte willen verwendet (der Operator verhält sich dann so wie im Skalarkontext). Die folgenden Nebeneffekte entstehen bei einer erfolgreichen Mustersuche:

Noch einmal: Diese Nebeneffekte entstehen nur, wenn ein Treffer gefunden wurde. Bei einem Fehlschlag bleiben sie unberührt. Die folgenden Dinge passieren jedoch bei jeder Mustersuche, egal ob sie erfolgreich ist oder nicht:

Einflüsse von außen auf den Match-Operator

Die Mustersuche mit dem Match-Operator hängt von mehr ab als nur von den Operanden und den Modifikatoren. In der folgenden Liste sind die weiteren Faktoren zusammengefasst:

Kontext

Der Kontext, in dem der Match-Operator verwendet wird (Skalar-, Listen- und Void-Kontext), hat großen Einfluss darauf, wie die Mustersuche vor sich geht, auf den Rückgabewert und auf die Nebeneffekte.

Aktuelle Position

Die aktuelle Position im Suchstring (sie wird entweder explizit mit pos(...) oder von einer früheren Mustersuche gesetzt) besagt, wo im String bei der nächsten Mustersuche mit /g begonnen wird. Das ist außerdem die Position, auf die ˹\G˼ passt.

Voreingestellte Regex

Bei einem leeren Regex-Operanden wird die voreingestellte Regex verwendet (siehe Voreinstellung bei einem leeren Regex-Operanden).

study

Hat keinen Einfluss auf die gefundenen Treffer oder den Rückgabewert, sondern nur darauf, wie schnell die Mustersuche abläuft. Wenn der Suchstring mit study vorbehandelt wurde, kann die Mustersuche schneller sein (oder auch langsamer). Siehe Die Funktion study.

m?...? und reset

Der unsichtbare Zustand des m?...?-Operators »hat bereits gepasst«/»hat nicht gepasst« wird verändert, wenn eine Mustersuche mit m?...? erfolgreich war oder wenn reset aufgerufen wird (siehe siehe Spezielle »Nur Einmal«-Mustersuche mit ?...?).

Was ist das für ein Kontext?

Abschließend zum Abschnitt über den Match-Operator eine Übungsaufgabe: Besonders bei while-, if- und foreach-Kontrollstrukturen muss man sehr genau aufpassen, welchen Kontext man gerade benutzt. Was gibt das folgende Programmstück aus?

while ("Eene Meene Muh" =~ m/\w+/g) {
   print "WHILE raus ist $&.\n";
}
print "\n";
if ("Eene Meene Muh" =~ m/\w+/g) {
   print "IF raus ist $&.\n";
}
print "\n";
foreach ("Eene Meene Muh" =~ m/\w+/g) {
   print "FOREACH raus ist $&.\n";
}

Die Frage ist ein bisschen verzwickt. Zur Auflösung siehe Lösung 14.

  

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