2016-11-15 1 views
2

Я пытаюсь подсчитать смежные вхождения в строке. Например:Регулярный подсчет смежного шаблона

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

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

print "$c\n"; 

Это печатает 1, но я хотел бы, чтобы это было 2, потому что есть на самом деле 2 смежное вхождение «аа» в «ааа»

Спасибо!

+0

Совет: Если вы просто хотите количество: 'мой $ с =() = $ строка = ~ /.../ г, или' мой $ с = 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 впереди текущей позиции.

Read more information about Look arounds

Смежные вопросы