perl正则表达式动态捕获

时间:2016-10-12 01:05:47

标签: regex perl

有没有办法设置动态捕获单元

my $pattern = '`(.*?)`';
$string =~ s{$pattern}{<code/>$1</code>}im;

但是我没有直接将<code/>$1</code>传递给替换,而是希望将其存储为变量(可能会根据我想要捕获的数据类型而推迟)

my $pattern = '`(.*?)`';
my $replace = '<code/>$1</code>'; #or my $replace = '<code/>$2</code>'
$string =~ s{$pattern}{$replace}im;

1 个答案:

答案 0 :(得分:0)

this post中,Jenda提供的解决方案可能适用于您的情况。它涉及创建一个sub,然后将sub评估为正则表达式。

#!/usr/bin/perl
use strict;
use warnings;

my $pattern = '`(.*?)`';
my $replace = '<code/>$1</code>';
my $code = 'sub {$_[0] =~ s{$pattern}{'. $replace . '}ig}';
my $re = eval $code;

my $string = "Here `is` a string";
$re->($string);

print $string;

这会打印Here <code/>is</code> a string

希望这有用。