perl grep匹配哈希表中的密钥

问题描述 投票:0回答:2

我正在处理Perl中的哈希。

我使用以下语句来检查变量是否与哈希表中的键匹配。该陈述已经评估为真。所以grep工作。但是,如何在匹配时检索哈希键和值?

if ( grep {/.*$var1*/} keys %my_hash ) {
  #print the key and value that results from the grep?
}
perl hash
2个回答
4
投票

您可以在以下条件中提取所有匹配的键:

if (my @matches = grep /.*$var1*/, keys %my_hash) {
    my @values = @my_hash{@matches};
}

此外,/.*$var1*/很奇怪。您想将最终的星号应用于变量中的最后一个吗?另外,如果没有.*,那么在开始时使用/g什么都不做:/$var1*/的工作方式相同(也许更快)。


0
投票
if (@captarr= grep {/.*$var1*/} keys %my_hash ) {
}

@captarr = grep (/.*$var1*/, keys %my_hash)是一个2参数函数; 第一个是正则表达式,第二个是正则表达式应用的数组, 返回匹配的数组就像第二个arg一样。 array是一个由数组组成的字符串,在全局搜索,如果没有匹配则返回nul。它类似于@captarr = $my_str ~= /.*$var1*/,具有LHS~ = RHS的交换参数位置

© www.soinside.com 2019 - 2024. All rights reserved.