替換爲變量,我無法找到一個解決方案,這和它的駕駛我瘋了!正則表達式搜索,並在Perl
my $foo = qr/(\S+) (\X+)/;
my $bar = qr/$2/;
line =~ s/$foo/$bar/g
我的問題是$bar
使用預先定義的$2
值而不是(\X+)
。
替換爲變量,我無法找到一個解決方案,這和它的駕駛我瘋了!正則表達式搜索,並在Perl
my $foo = qr/(\S+) (\X+)/;
my $bar = qr/$2/;
line =~ s/$foo/$bar/g
我的問題是$bar
使用預先定義的$2
值而不是(\X+)
。
請注意的是s
第二部分是不是正則表達式,而替換字符串正則表達式中。你可以實現你想要這個東西(注意最後ee
雙EVAL選項):
my $foo = qr/(\S+) (\X+)/;
my $bar = '$2'; # no interpolation
$line =~ s/$foo/$bar/gee; # first eval make $bar -> '$2', second replaces it
我猜$酒吧的價值應該只是一個字符串,而不是一個正則表達式。 qr //看起來不正確。
到BVR的建議類似,你可以使用子REF爲s///
更換側。這具有預編譯(sub ref和替換)的優點,而不是爲每個匹配重新編譯。在大多數情況下,這會更快,更有可能在編譯時捕獲任何錯誤。
my $foo = qr/(\S+) (\X+)/;
my $bar = sub { $2 }; # or my $bar = \&some_replace_function;
$line =~ s/$foo/$bar->()/ge;
謝謝,我爲第二個參數嘗試了很多東西,包括'\ 2','$ 2'等,我只是沒有結束ee。 – 2011-02-08 07:02:11