Perl 在字符串替换中,我们如何使用'/r';修饰语
我需要在字符串中增加一个数值:Perl 在字符串替换中,我们如何使用'/r';修饰语,perl,Perl,我需要在字符串中增加一个数值: my $str = "tool_v01.zip"; (my $newstr = $str) =~ s/\_v(\d+)\.zip$/ ($1++);/eri; #(my $newstr = $str) =~ s/\_v(\d+)\.zip$/ ($1+1);/eri; #(my $newstr = $str) =~ s/\_v(\d+)\.zip$/ $1=~s{(\d+)}{$1+1}/r; /eri; print $newstr; 预期输出为tool_
my $str = "tool_v01.zip";
(my $newstr = $str) =~ s/\_v(\d+)\.zip$/ ($1++);/eri;
#(my $newstr = $str) =~ s/\_v(\d+)\.zip$/ ($1+1);/eri;
#(my $newstr = $str) =~ s/\_v(\d+)\.zip$/ $1=~s{(\d+)}{$1+1}/r; /eri;
print $newstr;
预期输出为tool_v02.zip
注意:版本号
01
可能包含任意数量的前导零我认为这个问题与/r
修饰符无关,而是与如何正确格式化输出有关。为此,我建议:
或者,仅将数字替换为零宽度:
my$newstr=$str=~s{(?我认为这个问题与/r
修饰符无关,而是与如何正确格式化输出有关。为此,我建议:
或者,仅将数字替换为零宽度:
my$newstr=$str=~s{(?您缺少的位是sprintf
,其工作方式与printf
相同,只是它不是将格式化字符串输出到stdout
或文件句柄,而是将其作为字符串返回。示例:
sprintf("%02d",3)
生成字符串03
将其放入正则表达式中,您可以这样做。您可以使用零宽度前瞻((?=…)
)来匹配文件后缀,而不是使用/r
,只需将匹配的数字替换为新值即可
s/(\d+)(?=.zip$)/sprintf("%02d",$1+1)/ei
您缺少的位是sprintf
,其工作方式与printf
相同,只是它不是将格式化字符串输出到stdout
或文件句柄,而是将其作为字符串返回。例如:
sprintf("%02d",3)
生成字符串03
将其放入正则表达式中,您可以这样做。您可以使用零宽度前瞻((?=…)
)来匹配文件后缀,而不是使用/r
,只需将匹配的数字替换为新值即可
s/(\d+)(?=.zip$)/sprintf("%02d",$1+1)/ei
提示,my$newstr=$str=~s/..//r;
或(my$newstr=$str)=~s/../;
@Саа27:my$newstr=$str=~s/(\d+)/$1+1/er;
感谢它的工作,但是前面的零0
丢失了…它应该是tool\u v02.zip
获取输出tool\u v2.zip
您没有格式化$1+1
所以它当然会丢失前面的零zeros@ChrisTurner:这就是为什么我要问如何做。提示,my$newstr=$str=~s/..//r;
或(my$newstr=$str)=~s/../;
@Саа27:my$newstr=$str=~s/(\d+)/$1+1/er;
感谢它的工作,但是前面的零0
丢失了…它应该是tool\u v02.zip
获取输出tool\u v2.zip
您没有格式化$1+1
所以它当然会丢失前面的零zeros@ChrisTurner:这就是为什么我要问怎么做。这不能解决问题“注意:前面的0
可能是0..n
次。”@haukex n在问题中没有定义,所以我选择了2次……但我确信OP能够选择一个适合的数字,以便所有文件名具有相同的大小number@Chris:我想你误解了这个问题。”前面的0可能是0..n次英语很差,但这意味着可能有任意数量的前导零。这并不意味着n
将作为数据的一部分提供,而且您不能只选择2.@Borodin所以你不认为问题在于他们如何一致地设置一个数字的格式,以适应给定范围内的任何数字,并且可能有可选的前零吗?@Chris:我认为OP把他们自己弄糊涂了。主题行和下面几行代码显示了试图理解/r
修饰符的尝试,仅此而已.这是一个问题,就目前的情况而言,这很好。但是脚注试图包含零填充,这与关于/r
修饰符的主要论点完全无关。这里的问题应该重点突出且完整,但人们通常期望首先满足他们的需求。事实上,这是一个好问题它的答案是目标:它们的共同作用将不仅仅是OP。这不能处理“注意:前面的0
可能是0..n
次。”@haukex n在问题中没有定义,所以我选择了2…但我确信OP能够选择一个适合的数字,以便所有文件名都具有相同的大小number@Chris:我想你误解了这个问题。“前面的0可能是0..n次”是蹩脚的英语,但这意味着可能有任意数量的前导零。这并不意味着n
将作为数据的一部分提供,而且您不能只是“选择2”.@Borodin所以你不认为问题在于他们如何一致地设置一个数字的格式,以适应给定范围内的任何数字,并且可能有可选的前零吗?@Chris:我认为OP把他们自己弄糊涂了。主题行和下面几行代码显示了试图理解/r
修饰符的尝试,仅此而已.这是一个问题,就目前的情况而言,这很好。但是脚注试图包含零填充,这与关于/r
修饰符的主要论点完全无关。这里的问题应该重点突出且完整,但人们通常期望首先满足他们的需求。事实上,这是一个好问题它的答案就是目标:它们的共同作用不仅仅是OP。\u v\K
比更有效(?\u v\K
比更有效(?)?