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 に答える