Если вы хотите узнать количество групп захвата, которым соответствует регулярное выражение, просто посчитайте их. Не смотрите на значения, которые они возвращают, что является вашей проблемой:
Вы можете получить счет, посмотрев на результат назначения списка, который возвращает количество элементов в правой части назначения списка:
my $count = my @array = $string =~ m/.../g;
Если вам не нужно сохранять буферы захвата, присвойте пустой список:
my $count = () = $string =~ m/.../g;
Или сделать это в два этапа:
my @array = $string =~ m/.../g;
my $count = @array;
Вы также можете использовать переменные @+
или @-
, используя некоторые приемы, которые я показал на первых страницах Освоение Perl . Эти массивы имеют начальную и конечную позиции каждого из буферов захвата. Значения в индексе 0 применяются ко всему шаблону, значения в индексе 1 относятся к $1
и т. Д. Таким образом, последний индекс - это общее количество буферов захвата. См. perlvar .