Perl中的正则表达式匹配计数

时间:2011-08-28 00:23:34

标签: regex perl

我正在匹配形式为A< => B!C< => D!E< => F ...的字符串,并且想要对字母进行检查。基本上我想根据我定义的哈希来判断字母是否在类中。我有想法做以下正则表达式然后循环匹配的字符串:

$a =~ /(.)<=>(.)/g;

但我无法弄清楚有多少$ 1,$ 2变量匹配。我怎么知道有多少?另外,有更好的方法吗?我使用的是Perl 5.8.8。

3 个答案:

答案 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)

创建变量并在每次循环时递增它?