\G
die G-Anchor Konstrukt genannt wird. Es bedeutet, dass es übereinstimmen muss, wo das letzte erfolgreiche Spiel endete. Bevor ein Regex startet, ist \G
(wirklich eine Flagge) true
, so wird es als wahr beginnen, dann nach einem Leerzeichen suchen, es finden, immer noch wahr, findet das nächste, etc .. Wenn es kein Leerzeichen findet, \G
Flag wird falsch und bleibt (in diesem Fall).
Ohne es sucht es irgendwo im String statt nur am Anfang.
$ perl -E'my $n = " 49 here"; $n =~ s/\G /0/g; say $n'
00049 here
$ perl -E'my $n = " 49 here"; $n =~ s/ /0/g; say $n'
000490here
/\G/g
wird Übereinstimmen (nichts) nur 1-mal am Anfang der Zeichenfolge nur, weil Perl nicht zurückkehren wird genau das gleiche Spiel (definiert als die gleiche Ausgangsposition und gleiche Länge) zweimal. Deshalb ist es ein 0
dort hinzufügt und stoppt in dem folgenden:
In Perl, die Position, an der das letzte Spiel beendet ist mit der Variablen zugeordnet ist abgestimmt (nicht der Betreiber). Es kann mit der Funktion pos
beobachtet und geändert werden. \G
Flag bleibt mit der Variablen, nicht die Regex. Da es mit der Variablen verknüpft ist, die in einer nachfolgenden Anwendung einer anderen Regex zugeordnet wird, beginnt \G
mit dem letzten verbleibenden Spiel.
$ perl -E'my $n = "abcdefabc"; $n =~ /def/g; $n =~ s/\Gabc/ABC/; say $n'
abcdefABC
'\ G' heißt das G-Anker-Konstrukt. Es bedeutet, dass es übereinstimmen muss, wo das letzte erfolgreiche Spiel endete. – sln
"Ich kenne den' s' Modifikator (einzeilig). " Ich denke, Sie verwechseln das mit dem Substitutionsoperator. 's' Modifikator:'/foo/s' Substitutionsoperator: 's/foo/bar /' – ThisSuitIsBlackNot
Ja in der Tat, danke fürs Aufräumen! – Agnaroc