Von der Dokumentation sehe ich
%Vor% Aber ich bin mir nicht sicher, wie ich (?si-xm:...)
verstehen soll. Wenn ich einen Ausdruck auf qr/quick|lazy/
mache, habe ich (?-xism:quick|lazy)
. Was bedeutet es hier (?-xism:...)
auch?
Danke!
Wie in der perlre Man-Page erklärt:
Alle Buchstaben zwischen
?
und:
fungieren als Flags-Modifikatoren [...]
Die Buchstaben vor -
sind positive Modifikatoren; die danach sind negative Modifikatoren. So bedeutet beispielsweise (?-xism:quick|lazy)
, dass Whitespace und Kommentare in den Klammern nicht zulässig sind, der geklammerte Teil ist nicht , ein Punkt .
do < em> not stimmt mit Zeilenumbrüchen überein, und ^
und $
do nicht stimmen mit Zeilenanfang und Zeilenende überein.
Nur als Hinweis, die (?FLAGS:pattern)
Syntax hat sich mit Perl 5.14.0 geändert, und die Regex-Striginifikation hat sich mit ihr geändert. Um aus perlre
zu zitieren:
Beginnend in Perl 5.14, ein "^" (Caret oder Zirkumflex Akzent) unmittelbar nach dem "?" ist eine Kurzschrift, die "d-imsx" entspricht. Flags (außer "d") können dem Caret folgen, um ihn zu überschreiben. Aber ein Minuszeichen ist damit nicht legal.
( d
gehört zu einer Gruppe neuer Flags in 5.14, die sich darauf auswirken, wie Regexes von Unicode beeinflusst werden; d
, der Standardwert, bedeutet im Prinzip, wie ältere Perl-Versionen zu funktionieren).
Mit dem Zusatz der (?^FLAGS:pattern)
-Syntax ändert sich die reguläre Zeichenfolge, um diese Syntax zu verwenden, und listet nur die Flags auf, die sich vom Standard unterscheiden. So wird qr/hello/
als (?^:hello)
(ehemals (?-xism:hello)
) und qr/hello/i
als (?^i:hello)
(ehemals (?i-xsm:hello)
) angegeben.
Der Vorteil dieser Änderung besteht darin, dass, wenn Perl 5.16 einen neuen q
Regex-Modifikator hinzufügen würde (für "diese Übereinstimmung auf einem Quantencomputer ausführen") qr/hello/
nicht ändern muss, um nach% co_de zu stringifizieren % - es wird (?d-xismq:hello)
so bleiben können, wie es auf 5.14 ist.
Sie repräsentieren /x
, /i
, /s
, /m
, wenn der Buchstabe links von -
erscheint, und das Fehlen des Modifikators, wenn der Buchstabe rechts von% co_de erscheint %.
Der Zweck des Codes wird verwendet, um zu übertragen, welche Flags spezifiziert wurden
%Vor%... und was nicht.
%Vor% -
ist in perlre dokumentiert.