我正在匹配形式为A< => B!C< => D!E< => F ...的字符串,并且想要对字母进行检查。基本上我想根据我定义的哈希来判断字母是否在类中。我有想法做以下正则表达式然后循环匹配的字符串:
$a =~ /(.)<=>(.)/g;
但我无法弄清楚有多少$ 1,$ 2变量匹配。我怎么知道有多少?另外,有更好的方法吗?我使用的是Perl 5.8.8。
答案 0 :(得分:7)
您需要'countof'运算符来计算匹配数:
my $count = () = $string =~ /(.)<=>(.)/g;
用数组替换空列表将保留匹配项:
my @matches = $string =~ /(.)<=>(.)/g;
这提供了另一种获取$count
的方式:
my $count = @matches; # scalar @matches works too
答案 1 :(得分:1)
使用while
循环
use warnings;
use strict;
my %letters = map { $_ => 1 } qw(A C F);
my $s = 'A<=>B!C<=>D!E<=>F';
while ($s =~ /(.)<=>(.)/g) {
print "$1\n" if exists $letters{$1};
print "$2\n" if exists $letters{$2};
}
__END__
A
C
F
答案 2 :(得分:0)
创建变量并在每次循环时递增它?