解決策が見つからず、私を狂わせてしまいます。Regexp Perlで変数を検索し置換する
my $foo = qr/(\S+) (\X+)/;
my $bar = qr/$2/;
line =~ s/$foo/$bar/g
私の問題は$bar
が(\X+)
ではなく$2
の以前に定義された値を使用していることです。
解決策が見つからず、私を狂わせてしまいます。Regexp Perlで変数を検索し置換する
my $foo = qr/(\S+) (\X+)/;
my $bar = qr/$2/;
line =~ s/$foo/$bar/g
私の問題は$bar
が(\X+)
ではなく$2
の以前に定義された値を使用していることです。
s
の2番目の部分は正規表現ではなく、正規表現を置き換える文字列であることに注意してください。
s///
の交換側のためのサブ参照を使用することができますBVRの提案と同様に
my $foo = qr/(\S+) (\X+)/;
my $bar = '$2'; # no interpolation
$line =~ s/$foo/$bar/gee; # first eval make $bar -> '$2', second replaces it
$ barの値は文字列で正規表現ではないはずです。 qr //は正しく表示されません。
:あなたは、この(最後にee
ダブルevalのオプションに注意してください)と欲しいものを達成することができます。これは、各マッチのために再コンパイルされるのではなく、プリコンパイル(サブrefと置換の両方)されているという利点があります。ほとんどの場合、コンパイル時にエラーが発生する可能性が高くなります。
my $foo = qr/(\S+) (\X+)/;
my $bar = sub { $2 }; # or my $bar = \&some_replace_function;
$line =~ s/$foo/$bar->()/ge;
ありがとう、私は '\ 2'、 '$ 2'など2番目の引数のために多くのことを試していましたが、私は最後にeeを持っていませんでした。 –