正则表达式搜索,并在Perl
问题描述:
替换为变量,我无法找到一个解决方案,这和它的驾驶我疯了!正则表达式搜索,并在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