如何更改perl文件中匹配字符串中的子字符串

use*_*865 0 regex perl

我想要以下改变:

原版的 :

Format="%05dA1"
StartValue="2"
Format="%05dB1"
StartValue="2"
Format="%05dC1"
StartValue="2"
Run Code Online (Sandbox Code Playgroud)

改性:

Format="%05dA2"
StartValue="2"
Format="%05dB2"
StartValue="2"
Format="%05dC2"
StartValue="2"
Run Code Online (Sandbox Code Playgroud)

我尝试了以下正则表达式,但我无法得到我想要的.

$main_course =~ s/05d\w{2}\d{1}/05d\w{2}$name/g
Run Code Online (Sandbox Code Playgroud)

Bor*_*din 5

我担心人们正在努力解决这个问题.如果你正在运行的Perl 5版本10或更高版本(你应该,因为这是逾50岁),则可以有效地采用\K该序列ķ做托换时EEPS什么左边.

use strict;
use warnings;

while (<DATA>) {
  s/%05[a-z]{2}\K(\d)/$1+1/gie;
  print;
}

__DATA__
Format="%05dA1"
StartValue="2"
Format="%05dB1"
StartValue="2"
Format="%05dC1"
StartValue="2"
Run Code Online (Sandbox Code Playgroud)

产量

Format="%05dA2"
StartValue="2"
Format="%05dB2"
StartValue="2"
Format="%05dC2"
StartValue="2"
Run Code Online (Sandbox Code Playgroud)

如果您遇到旧版本的Perl,那么只需捕获第一部分并再次将其重新放回

s/(%05[a-z]{2})(\d)/$1.($2+1)/gie;
Run Code Online (Sandbox Code Playgroud)