我的代码是这样的。
#!/usr/bin/perl
use strict;
use warnings;
my @list = <>;
chomp(@list);
my @matches =grep /^\d+(,\d+)*$/, @list;
if (@matches>0)
{
print scalar @matches . "\n";
}
else {
}
输入的数字是这样的
sd 45
gdfg 34
fg dfg 345 df
那么它应该打印 7
但它打印 3
我应该如何修改regex来分别计算整数?
要捕获所有的数字,作为单个元素,你可以这样做。
my @matches = map /([0-9])/, @list;
如果你想只捕获完全是数字的行的数字,你可以添加一个grep:
my @matches = map /([0-9])/, grep /^[0-9]+\z/, @list;
你在评论中已经解释了你想问的是如何从输入中提取数字
my @digits;
while (my $line = <>) {
push @digits, $line =~ /\d/g;
}
从你的问题中可以推测出,你也想对它们进行计数。这只是一个在标量上下文中评估数组的问题。
my $num_digits = @digits;
say "There are $num_digits digits: @digits";
只要把整个文件读到变量中,用regex分别提取每个数字到一个数组中。
然后用 scalar @digits
如果你想看到数字的列表,那么 join ', ', @digits
将有助于以简单易懂的形式获得数字列表。
use strict;
use warnings;
use feature 'say';
my $file = do { local $/; <DATA> };
my @digits = $file =~ /(\d)/g;
say 'Counted ' . scalar @digits . ' digits';
say 'List: ' . join ', ', @digits;
__DATA__
sd 45
gdfg 34
fg dfg 345 df
輸出
Counted 7 digits
List: 4, 5, 3, 4, 3, 4, 5