Perl перебирает каждый матч
Скажем, я просматриваю страницу raw html, которая ищет это регулярное выражение. (Конец цитаты на конце преднамерен).
m/(https?:\/\/.*?(?:'|"))/
Этот шаблон, вероятно, будет соответствовать ~ 100 раз. Что такое общая perl idiom/быстрый способ перебора списка всех совпадений группы захвата?
Ответы
Ответ 1
Из perlretut (очень тонкий учебник)
while ($x =~ /(\w+)/g) {
print "Word is $1, ends at position ", pos $x, "\n";
}
Вы можете использовать while
вместе с модификатором g
для повторения всех совпадений, при этом $1
вы получите содержимое вашей группы захвата 1, и в этом примере из учебника вы также получите позицию с pos
.
Ответ 2
Модификатор глобального соответствия 'g
' возвращает список захваченных совпадений в контексте списка:
say $_ for $str =~ /un($wanted)/g; # Prints only $wanted
Ответ 3
@Zahid: Я думаю, что ваш подход более компактен. надеюсь, что следующий фрагмент поможет понять ваш пример.
my $str = 'file_%date%_%name%_%lang%.txt';
my @ts = $str =~ /%([\w]+)%/g;# <----------Zahid said
print join(", ", @ts);
Вывод:
date, name, lang