У меня есть несколько строк, таких как
int foo[] = { a, b, c, d, e };
Точное количество элементов в массиве неизвестно.Я хочу сопоставить его, используя регулярное выражение perl
.Я идентифицирую строки, используя
if ( $line =~ /^\ *int\ *([a-z]+)\ *\[\]\ *=\ *{(\ *([a-z]+)\ *,?)+}\ *;/ )
{
print $line;
}
Как узнать количество совпадений, поскольку я хочу работать с каждым из элементов в массиве?
В идеалеЯ хотел бы что-то вроде
if ( $line =~ /^\ *int\ *([a-z]+)\ *\[\]\ *=\ *{(\ *([a-z]+)\ *,?)+}\ *;/ )
{
my $count_of_matches = ??????
for (my $matches=0 ; $matches<count_of_matches ; $matches++)
{
print $matches, "\n";
}
}
, что должно привести к чему-то вроде
foo
a
b
c
d
e
Я попытался
my $count_of_matches = () = $line =~ /.../ # using the same pattern as above
my @list = $line =~ /.../
my $other_count_of_matches = scalar @list
Но я получил счет 3, имассив perl
содержит только имя массива (foo
) и дважды последний элемент (e
).