1

我使用以下代码进行替换。有没有办法检索替换的文本?在这个例子中,我想得到字符串_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";
4

2 回答 2

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

(您不应$&其用于此目的,因为它会使程序中的所有正则表达式显着变慢。)

于 2013-04-05T03:29:22.457 回答
1

检查perldoc.perl.org/perlvar.html中关于与正则表达式相关的变量的部分,特别是变量$&

于 2013-04-05T03:27:58.670 回答