Perl正则表达式插值

时间:2013-12-10 07:47:59

标签: regex perl interpolation

我有一些代码:

$a = 'abcdef';
$b = 'f\1d';
$a =~ s/d(e)f/$b/g;
print $a;

我得到abcf\1d,但我怎样才能获得abcfed

2 个答案:

答案 0 :(得分:5)

$a = 'abcdef';
$b = '"f$1d"';
$a =~ s/d(e)f/$b/gee;
print $a;

请注意e中有两个/gee修饰符;第二个将"f$1d"字符串评估为fed

作为旁注,您不需要/g,因为您只替换了一个模式事件。

答案 1 :(得分:2)

$a$b是特殊变量,用于sort。所以你根本不能使用它们。

更好的解决方案是使用另一个变量然后:

$var_a = 'abcdef';
$var_b = '"f${1}d"';
$var_a =~ s/d(e)f/$var_b/gee;
print $var_a;

诀窍是说,替换使用\1首先找到的var(使用/e标志来避免使用\1:P)