Bedeutung der Druckergebnisse von qr in Perl

7

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!

    
Qiang Li 22.10.2011, 00:38
quelle

3 Antworten

15

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.

    
ruakh 22.10.2011, 00:55
quelle
11

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.

    
hobbs 22.10.2011 01:35
quelle
0

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.

    
ikegami 22.10.2011 04:40
quelle

Tags und Links