Regex 条件正则表达式捕获,来自哈希的grepping数组
给定以下匿名哈希数组:Regex 条件正则表达式捕获,来自哈希的grepping数组,regex,perl,if-statement,Regex,Perl,If Statement,给定以下匿名哈希数组: $fields_dump = [ { 'DEFAULT_FIELD_LABEL' => 'telco_hier_building', 'APPROVER_ORDER' => '0', 'IS_READONLY' => '0', 'FORM_ID' => '3913', 'REFERENCE' => 'building', }, {
$fields_dump = [
{
'DEFAULT_FIELD_LABEL' => 'telco_hier_building',
'APPROVER_ORDER' => '0',
'IS_READONLY' => '0',
'FORM_ID' => '3913',
'REFERENCE' => 'building',
},
{
'DEFAULT_FIELD_LABEL' => 'Request Type',
'APPROVER_ORDER' => '0',
'IS_READONLY' => '0',
'FORM_ID' => '3913',
'REFERENCE' => 'request_type',
},
{
'DEFAULT_FIELD_LABEL' => 'Request Completion Date',
'APPROVER_ORDER' => '0',
'IS_READONLY' => '0',
'FORM_ID' => '3913',
'REFERENCE' => 'request_completion_date',
},
我想通过DEFAULT\u FIELD\u LABEL
有条件地为telco\u hier\u building
或telco\u imac\u building
的值对数组进行grep。当它成功时,我需要提取匹配值的第二个下划线
我正在使用以下代码:
if ( grep { $_->{DEFAULT_FIELD_LABEL} =~ m/(telco_hier_|telco_imac_)building/ } @$fields_dump ) {
my $telco_prefix = $1;
...
}
条件触发正确,但regex$1
赋值为空,在本例中,它应该是telco\u hier\u
我做错了什么?匹配的范围是
{}
代码块。您可以使用来代替
循环:
use warnings;
use strict;
my $fields_dump = [
{
'DEFAULT_FIELD_LABEL' => 'telco_hier_building',
'APPROVER_ORDER' => '0',
'IS_READONLY' => '0',
'FORM_ID' => '3913',
'REFERENCE' => 'building',
},
{
'DEFAULT_FIELD_LABEL' => 'Request Type',
'APPROVER_ORDER' => '0',
'IS_READONLY' => '0',
'FORM_ID' => '3913',
'REFERENCE' => 'request_type',
},
{
'DEFAULT_FIELD_LABEL' => 'Request Completion Date',
'APPROVER_ORDER' => '0',
'IS_READONLY' => '0',
'FORM_ID' => '3913',
'REFERENCE' => 'request_completion_date',
},
];
for (@{ $fields_dump }) {
if ($_->{DEFAULT_FIELD_LABEL} =~ m/(telco_hier_|telco_imac_)building/) {
my $telco_prefix = $1;
print "$telco_prefix\n";
}
}
输出为:
telco_hier_
进一步解释参见。匹配的范围是
{}
代码块。您可以改用for
循环:
use warnings;
use strict;
my $fields_dump = [
{
'DEFAULT_FIELD_LABEL' => 'telco_hier_building',
'APPROVER_ORDER' => '0',
'IS_READONLY' => '0',
'FORM_ID' => '3913',
'REFERENCE' => 'building',
},
{
'DEFAULT_FIELD_LABEL' => 'Request Type',
'APPROVER_ORDER' => '0',
'IS_READONLY' => '0',
'FORM_ID' => '3913',
'REFERENCE' => 'request_type',
},
{
'DEFAULT_FIELD_LABEL' => 'Request Completion Date',
'APPROVER_ORDER' => '0',
'IS_READONLY' => '0',
'FORM_ID' => '3913',
'REFERENCE' => 'request_completion_date',
},
];
for (@{ $fields_dump }) {
if ($_->{DEFAULT_FIELD_LABEL} =~ m/(telco_hier_|telco_imac_)building/) {
my $telco_prefix = $1;
print "$telco_prefix\n";
}
}
输出为:
telco_hier_
进一步解释请参见