Perl正则替换中匹配变量的引用问题

我有以下 Perl 代码:

$str_1 = "text t1 t2 // ABC";
print "\$str_1 = $str_1\n";
$str_1 =~ s/^(\S+)\s+(\S+)\s+(\S+)(.+)$/$1 ( $2 $3 )$4/;
print "\$str_1 = $str_1\n";
执行结果和预期一致:
$str_1 = text t1 t2 // ABC
$str_1 = text ( t1 t2 ) // ABC

但是我需要的匹配表达式都只能从外界读取,无法写在程序里。所以我把这两个表达式分别定义成了 $var_1 和 $var_2 两个变量,然后在正则替换时使用它们。却发现结果不对,$var_2 中的 $1 $2 $3 $4 都是原样输出的。

$var_1 = '^(\S+)\s+(\S+)\s+(\S+)(.+)$';
$var_2 = '$1 ( $2 $3 )$4';
$str_1 = "text t1 t2 // ABC";
$str_1 =~ s/$var_1/$var_2/;
print "\$str_1 = $str_1\n";
输出是:
$str_1 = $1 ( $2 $3 )$4

我把 $var_2 里的 $1 改为 \1,改为 \$1,改为 \\1,并且把 $2/3/4 也进行一样的修改,或者把 s/$var_1/$var_2/ 改为 s/$var_1/\Q$var_2\E/ 及 s/$var_1/\q$var_2\e/,结果也都不对。

请问如果通过变量赋予正则替换所需的操作,正确的方法是什么?上述代码应该如何修改?所需的替换不限于这一种替换,而是根据读取的表达式来做,各种复杂情况都有可能发生。

谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值