在Perl中,如何编写正则表达式匹配字符串

在Perl中,如何编写正则表达式匹配字符串,perl,Perl,我想在另一行写1美元作为替换 my $converting_rules = +{ '(.+?)' => '$1', }; my $pre = $converting_rule_key; my $post = $converting_rules->{$converting_rule_key}; #$path_file =~ s/$pre/$post/; // Bad... $path_file =~ s/$pre/$1/; // Good! 在坏的情况下,$

我想在另一行写1美元作为替换

my $converting_rules = +{
    '(.+?)' => '$1',
};

my $pre     = $converting_rule_key;
my $post    = $converting_rules->{$converting_rule_key};
#$path_file =~ s/$pre/$post/; // Bad... 
$path_file =~ s/$pre/$1/; // Good!
在坏的情况下,$1被识别为字符串“$1”。 但我不想用匹配的字符串来处理它。
我不知道该怎么办…请帮帮我

问题在于
s/$pre/$post/
插值变量
$pre
$post
,但不会递归地插值其中任何看起来像变量的内容。因此,您希望使用
/ee
标志向替换添加一个额外的
eval

$path_file =~ s/$pre/$post/ee;
打印
$1.00
,因此

$x = '$1.00';
s/(abc)/$x/;
替换为
$1.00

您拥有的是一个模板,但您没有对该模板进行任何处理。可以处理这样的模板

use String::Interpolate qw( interpolate );
$rep = '$1';
s/$pat/ interpolate($rep) /e;

那么不要用单引号括起来?@Wooble:OP可能想要由
s///
运算符确定的
$1
的值,而不是定义
$converting\u rules
时的值。@ikegami谢谢。修正了,但是现在我需要做更多的研究。没有/e:用
qq/$post/
的结果替换。With/e:替换为
$post
的结果。With/ee:用
eval($post)
的结果替换。我明白了。因此
s/PATTERN/$var/
s/PATTERN/$var/e
是(几乎/完全)等价的,但是
s/PATTERN/reverse$var/
s/PATTERN/reverse$var/e
可能分别导致替换
“reverse filename”
“emanelif”
use String::Interpolate qw( interpolate );
$rep = '$1';
s/$pat/ interpolate($rep) /e;