如何使用交替和替换进行Perl正则表达式

时间:2018-12-27 08:42:13

标签: regex perl alternation

我希望将“ 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?

  • 替代者最多不超过3个,所以我可以分三步进行,但我不想这么做。

任何帮助将不胜感激。

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;
...