Число совпадений регулярных выражений в Perl - PullRequest
2 голосов
/ 28 августа 2011

Я сопоставляю строку вида A <=> B! C <=> D! E <=> F ... и хочу проверить буквы. В основном я хочу сказать, находятся ли буквы в классе в соответствии с определенным мной хэшем. У меня была идея сделать следующее регулярное выражение, а затем перебрать подходящие строки:

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

Но я не могу понять, сколько переменных $ 1, $ 2 соответствует. Откуда я знаю, сколько их? Кроме того, есть ли лучший способ сделать это? Я использую Perl 5.8.8.

Ответы [ 3 ]

7 голосов
/ 28 августа 2011

Вы хотите, чтобы оператор countof подсчитывал количество совпадений:

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

Замена пустого списка массивом сохранит совпадения:

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

, который предоставляет другой способ получить $count:

my $count = @matches;   # scalar @matches works too
1 голос
/ 28 августа 2011

Используйте 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
0 голосов
/ 28 августа 2011

Создать переменную и увеличивать ее каждый раз, когда вы проходите цикл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...