我希望将“ eAlpha eBeta eGamma”转换为“ fAlpha fBeta fGamma”。当然,这只是更复杂替换的简化示例。
这是我的perl程序:
my $data= "eAlpha eBeta eGamma";
$data=~ s/(e)(Alpha)|(e)(Beta)|(e)(Gamma)/f$2/g;
say $data;
输出为
fAlpha f f
Perl regex似乎记得$ 1,但不记得$ 2。有没有办法使用正则表达式交替,全局替换以及捕获变量$ 1,$ 2?
任何帮助将不胜感激。
答案 0 :(得分:1)
您对使用交替表示积极的前瞻,只需匹配e
并将其替换为f
。
my $data = "eAlpha eBeta eGamma";
$data=~ s/e(?=Alpha|Beta|Gamma)/f/g;
print($data);
打印
fAlpha fBeta fGamma
答案 1 :(得分:0)
捕获组从左到右移动而没有“尊重” |
。因此Beta
被捕获在$4
中,而Gamma
被捕获在$6
中。
但是您可以将其压缩为两个组,并另外使第一组不使用?:
捕获(或者根本不使用组,因为它只是一个字符,但是您可能还有其他用途)在那需要一群人的“真实事物”中。
...
$data =~ s/(?:e)(Alpha|Beta|Gamma)/f$1/g;
...