Der Regex-Operand

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

Der Regex-Operand kann ein Regex-Literal oder ein Regex-Objekt sein (in Wirklichkeit auch ein String oder jede Art von Ausdruck, aber das ist kaum je sinnvoll). Bei einem Regex-Literal können außerdem Modifikatoren angegeben werden.

Mustersuche mit einem Regex-Literal

Am häufigsten wird der Match-Operator mit einem Regex-Literal mit m/.../ oder /.../ benutzt. Das ›m‹ am Anfang ist optional, wenn die Begrenzungszeichen Schrägstriche oder Fragezeichen sind (Fragezeichen haben eine besondere Bedeutung, mehr dazu später). Ich verwende aus Gründen der Konsistenz immer m, auch dann, wenn es nicht nötig ist. Wie weiter vorn beschrieben wurde, kann man die Begrenzungszeichen nach dem m recht frei wählen (siehe dazu Begrenzungszeichen für den Regex-Operanden).

Bei einem Regex-Literal kann man die allgemeinen Modifikatoren aus Regex-Modifikatoren anhängen. Beim Match-Operator gibt es außerdem die zwei Modifikatoren /g und /c, die weiter unten besprochen werden.

Mustersuche mit einem Regex-Objekt

Der Regex-Operand kann auch ein Regex-Objekt sein, das mit qr/.../ erzeugt wurde. Ein Beispiel:

my $regex = qr/regex/;
    .
    .
    .
if ($text =~ $regex) {
    .
    .
    .

Man kann auch mit einem Regex-Objekt die Notation m/.../ verwenden. Wenn das Regex-Literal zwischen den Begrenzern nur genau ein interpoliertes Regex-Objekt ist, dann ist das exakt dasselbe wie das Regex-Objekt allein. Das Beispiel oben kann also auch so geschrieben werden:

if ($text =~ m/$regex/) {
    .
    . 
    .

Das entspricht einerseits der gewohnten Form, andererseits kann man so auch bei einem Regex-Objekt den /g-Modifikator angeben. (Die anderen Modifikatoren kann man zwar auch angeben, sie werden aber ignoriert, weil nur die am Objekt »klebenden« Modifikatoren wirksam sind, siehe Match-Modifikatoren bleiben kleben.)

Voreinstellung bei einem leeren Regex-Operanden

Wenn keine Regex angegeben ist wie bei m// (oder bei m/$regex/, wenn die Variable $regex leer oder nicht definiert ist), dann wird die zuletzt erfolgreich benutzte Regex im gleichen dynamischen Geltungsbereich verwendet. Das konnte man in früheren Perl-Versionen zur Effizienzsteigerung ausnutzen, aber seit es Regex-Objekte gibt, ist diese Vorgehensweise veraltet (siehe Regex-Objekte aufbauen und verwenden).

Spezielle »Nur Einmal«-Mustersuche mit ?...?

Mit Fragezeichen als Begrenzern verhält sich der Match-Operator sehr eigentümlich. Wenn ein Ausdruck mit m?...? gepasst hat, liefert er bei einer neuen Mustersuche falsch zurück, bis im gleichen Package reset aufgerufen wird. In der Dokumentation zu Perl Version 1 stand dazu: »Eine nützliche Optimierung, wenn man nur am ersten Vorkommen eines Musters in einer Reihe von Dateien interessiert ist.« In modernen Perl-Programmen habe ich diese Form noch nie gesehen.

Wenn Fragezeichen als Begrenzer gewählt werden, ist – wie beim Schrägstrich – das führende ›m‹ optional: ?...? ist dasselbe wie m?...?.

  

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