die folgenden Befehle vor:ungerades Verhalten mit Greedy Modifikatoren Innen Capture-Gruppen
text <- "abcdEEEEfg"
sub("c.+?E", "###", text)
# [1] "ab###EEEfg" <<< OKAY
sub("c(.+?)E", "###", text)
# [1] "ab###EEfg" <<< WEIRD
sub("c(.+?)E", "###", text, perl=T)
# [1] "ab###EEEfg" <<< OKAY
Die erste macht genau das, was ich erwarte, im Grunde nur der erste E. Die zweite Anpassung im Wesentlichen identisch mit dem ersten sein sollte, da Alles, was ich tue, ist das Hinzufügen einer einfangenden Gruppe (obwohl ich sie nicht verwende), aber aus irgendeinem Grund fängt sie ein extra E ein. Das heißt, es ist nicht vollständig gierig (dh wenn es wäre, hätte es alle gefangen Es). Noch seltsamer, es entspricht tatsächlich noch dem Muster, obwohl das sub
Ergebnis das .+?
Stück vortäuscht, das EE
weggelassen wird, das nicht mehr durch den Rest des regulären Ausdrucks verglichen werden kann. Dies deutet darauf hin, dass bei der Berechnung der Länge des übereinstimmenden Unterausdrucks ein Offset-Problem auftritt und nicht bei der tatsächlichen Übereinstimmung.
Die letzte ist genau das gleiche, aber mit PCRE laufen, und das funktioniert wie erwartet.
Fehle ich etwas oder ist dieses Verhalten undokumentiert/fehlerhaft?
Dies riecht wie ein Fehler in R. – nneonneo
Posted als ** [ein Fehler] (https://github.com/laurikari/tre/issues/21) ** auf der tre GitHub-Seite. – BrodieG