2011-08-28 56 views
2

我正在匹配一個字符串形式A < => B!C < => D!E < => F ...並且希望對字母進行檢查。基本上我想根據我定義的散列來判斷這些字母是否在類中。我不得不做以下的正則表達式,然後通過匹配的字符串循環的理念:在Perl中的正則表達式匹配計數

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

但我想不出來告訴變量有多少$ 1,$ 2相匹配。我怎麼知道有多少人?另外,有沒有更好的方法來做到這一點?我正在使用Perl 5.8.8。

回答

7

你會想「countof」操作數匹配的數量:使用數組將保留比賽更換空列表

my $count =() = $string =~ /(.)<=>(.)/g; 

my @matches = $string =~ /(.)<=>(.)/g; 

這提供了另一種方式來獲得$count

my $count = @matches; # scalar @matches works too 
0

每次你經過你的循環時,創建一個變量並增加它?

+0

是的,但我的循環是什麼邊界?我可以把字符串的長度和分開,但我希望有一個更一般的解決方案。 – Kat

+0

如果您使用適當類型的循環,則不需要邊界,如工具答案所示。 – Amber

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