【问题标题】:Count number grep matches?数数grep匹配?
【发布时间】:2014-11-06 18:51:31
【问题描述】:

如果我执行以下操作,$c 将变为 1,我希望它会是 2,这是一种计算 grep 匹配数的紧凑方法。

my %h = (
    "abc" => undef,
    "abcd" => undef,
    "abcde" => undef
);

my $c = 0;
$c++ if grep {/bcd/} keys %h;
print $c;

在这种情况下,计算grep 匹配数的正确方法是什么?

【问题讨论】:

  • 你在想$c++ for grep {/bcd/} keys %h;

标签: regex perl hash grep


【解决方案1】:

只需将计数器分配给 grep,

my $c = grep {/bcd/} keys %h;

来自perldoc

在标量上下文中,返回表达式为真的次数。

【讨论】:

  • 如果键中出现多次“c”怎么办?
  • @perlsufi 'c' 与正则表达式 /bcd/ 不匹配。
  • 对不起,我的意思是 grep 的字符串,'bcd'。它会匹配键中出现“bcd”的所有时间吗?即,“abcdabcdbcd”?
  • @perlsufi 它只会计算一个匹配的 perl 列表元素。
  • @perlsufi, grep 过滤标量; grep 不执行正则表达式匹配。因此,它返回剩余的标量数,而不是某些字符串在其他字符串中出现的次数。
猜你喜欢
  • 1970-01-01
  • 2013-04-14
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2014-10-20
  • 1970-01-01
  • 2015-09-03
相关资源
最近更新 更多