我使用以下代码进行替换。有没有办法检索替换的文本?在这个例子中,我想得到字符串_5p_outsuffix.txt
。
/tmp$ ./main.pl
xxx_5p_outsuffix.txt
/tmp$ cat main.pl
#!/usr/bin/env perl
use strict;
use warnings;
my $filename="xxx_5p_insuffix.txt";
my $insuffix="_((5|3)p)_insuffix\.txt";
my $outsuffix = '_$1_outsuffix.txt';
$filename =~ s/$insuffix$/qq{"$outsuffix"}/ee;
print "$filename\n";
答案 0 :(得分:4)
你应该捕获匹配字符串:
$filename =~ s/($insuffix)$/qq{"$outsuffix"}/ee;
print "$filename\n";
print "Substituted: $1\n";
由于这会引入额外级别的大括号,因此您必须调整替换字符串中使用的任何捕获的数量。或者,您可以使用${^MATCH}
修饰符包含由上一个成功正则表达式匹配的字符串的内置/p
变量。这看起来像
$filename =~ s/$insuffix$/qq{"$outsuffix"}/eep;
print "$filename\n";
print "Substituted: ${^MATCH}\n";
(你不应该使用$&
用于此目的,因为它会使程序中的所有正则表达式都显着变慢。)
答案 1 :(得分:1)
查看perldoc.perl.org/perlvar.html中与正则表达式相关的变量部分,尤其是变量$&