我有一个这样的字符串: 1,2,4 0:5 1:10 3:14 我想将其转换为。 1,2,4 1:5 2:10 4:14 只需将“:”前的数字增加1。 我尝试过: perl -w -e '$s="1,2,4 0:5 1:10 3:14"; $s =~ s/([0-9]*):/print(($1+1).":")/ge; print("$s\n");' 这个奇怪地返回了 1:2:4:1,2,4 15 110 114 有没有实现我的目标的简单方法?
你已经接近正确,但需要匹配至少一个数字,后面跟着冒号:,替换部分必须返回所需的结果,而不是打印它。my $s = "1,2,4 0:5 1:10 3:14"; $s =~ s/([0-9]+) (?=:)/ $1+1 /xge; print $s, "\n";
(?= )
是正向先行断言(不进入$1
),而/x
则忽略空格/换行符,当您想编写一个正则表达式时,这可能更容易阅读/维护。 - mpapec