2016-11-15 3 views
2

文字列内の隣接するオカレンスを数えようとしています。たとえば:正規表現カウント隣接パターン

my $pattern = "aa"; 
my $string = "aaa"; 

my @matches = $string =~ /($pattern)+/g; 
my $c = @matches; 

print "$c\n"; 

これは1を出力しますが、「AAA」の「AA」の2つの隣接出現

おかげで実際に存在しているので、私はそれが2になりたいです!

+0

ヒント:あなただけのカウントしたい場合: '私の$ C =()= $文字列=〜/.../グラム;'や '私の$ C = 0; ++ $ c while $ string =〜/.../ g; ' – ikegami

答えて

6

あなたが代わりに試合のゼロ幅の先読み使用することができます。

use strict; 
use warnings; 

my $pattern = "(?=aa)"; 
my $string = "aaa"; 

my @matches = $string =~ /$pattern/g; 
my $c = @matches; 

print "$c\n"; 
//=> 2 

(?=aa)は、現在位置のaa先を見つけた場合はtrueをアサートします肯定先読みです。

Read more information about Look arounds