Подтвердить что ты не робот

Perl перебирает каждый матч

Скажем, я просматриваю страницу raw html, которая ищет это регулярное выражение. (Конец цитаты на конце преднамерен).

m/(https?:\/\/.*?(?:'|"))/

Этот шаблон, вероятно, будет соответствовать ~ 100 раз. Что такое общая perl idiom/быстрый способ перебора списка всех совпадений группы захвата?

4b9b3361

Ответ 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