在Perl中,如何编写正则表达式匹配字符串
我想在另一行写1美元作为替换在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! 在坏的情况下,$
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;