从文件中读取匹配规则。变量中包含的模式

时间:2018-01-12 17:15:17

标签: regex perl

我想使用Config :: INifiles从配置文件中读取匹配的模式。 即一切都包含在变量中。

匹配工作正常:

my $user = "CN=vpn,ou=test";
my $pattern = 'CN=(.*),ou=test';

if ($user =~ /$pattern/) {
    print "match\n";
    print $1;
};

但现在我还想使用$1访问第一场比赛,我也想从配置文件中读取。

有没有办法实现这个目标?

my $user = "CN=vpn,ou=test";
my $pattern = 'CN=(.*),ou=test';
my $m = "\\$1";

if ($user =~ /$pattern/) {
    print "match\n";
    print $m;
};

2 个答案:

答案 0 :(得分:2)

这可能会对你有所帮助:

my $user = 'CN=vpn,ou=test';
my $pattern = 'CN=(.*),ou=test';
my $m = 1; # number of capturing group

if (my @c = $user =~ /$pattern/) {
    print "match\n";
    print $c[$m-1];
};

答案 1 :(得分:0)

您可以将$m视为要执行的Perl代码,也可以将其视为模板。后者是更好的方法。您可以使用String :: Substitution' interpolate_match_vars作为模板处理器。

use String::Substitution qw( interpolate_match_vars last_match_vars );

my $interpolated = interpolate_match_vars($m, last_match_vars());