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;

在这篇文章中,Jenda提供了一个可能适用于您的情况的解决方案。它包括创建一个子对象,然后将子对象求值为一个正则表达式。

#!/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

希望对大家有帮助

最新更新