Ich weiß, diese Frage ist 4 Jahre alt . Aber ich fand die Antwort von YOU sehr interessant, da ich nicht wusste split
könnte so funktionieren. Also möchte ich es mit einem Auszug aus dem perldoc split erweitern, der dieses Verhalten für neue Leser erklärt. :-)
my $str = "1:2:3:4:5";
my ($a, $b) = split /:([^:]+)$/, $str;
# Capturing everything after ':' that is not ':' and until the end of the string
# Now $a = '1:2:3:4' and $b = '5';
Von Perldoc:
Wenn das Muster Gruppen enthält erfassen, dann für jeden Abscheider, ein zusätzliches Feld für jede Teilkette durch eine Gruppe (in der Reihenfolge, in der erfaßt wird, um die erzeugten Gruppen werden gemäß den Rückreferenzen angegeben); Wenn eine Gruppe nicht übereinstimmt, wird der Undef-Wert anstelle einer Teilzeichenfolge erfasst. Beachten Sie außerdem, dass ein solches zusätzliches Feld immer dann erzeugt wird, wenn ein Trennzeichen vorhanden ist (dh immer dann, wenn eine Teilung auftritt), und ein solches zusätzliches Feld wird nicht zum LIMIT gezählt. Betrachten Sie die folgenden Ausdrücke in Listenkontext ausgewertet (jede zurückgegebene Liste wird in dem zugehörigen Kommentar zur Verfügung gestellt):
split(/-|,/, "1-10,20", 3)
# ('1', '10', '20')
split(/(-|,)/, "1-10,20", 3)
# ('1', '-', '10', ',', '20')
split(/-|(,)/, "1-10,20", 3)
# ('1', undef, '10', ',', '20')
split(/(-)|,/, "1-10,20", 3)
# ('1', '-', '10', undef, '20')
split(/(-)|(,)/, "1-10,20", 3)
# ('1', '-', undef, '10', undef, ',', '20')
Duplizieren: http://stackoverflow.com/questions/1098295/perl-is-there-a-way-to-split-on-the-last-regex -match-only – Zaid