Perl позволяет регулярному выражению совпадать несколько раз с переключателем «g» после конца.Каждое отдельное совпадение затем может быть зациклено, как описано в подразделе «Глобальное сопоставление» раздела Использование регулярных выражений в Perl Учебника по регулярным выражениям Perl :
while(/(x(?<foo>.))+/g){
say "&: ", $&;
say "foo: ", $+{foo};
}
. Это приведет к повторному выполнениюlist:
&: xa
foo: a
&: xb
foo: b
&: xc
foo: c
Что еще не то, что вы хотите, но это действительно близко.Сочетание глобального регулярного выражения (/ g) с вашим предыдущим локальным регулярным выражением, вероятно, сделает это.Как правило, создайте группу захвата вокруг вашей повторяющейся группы, затем повторно проанализируйте только эту группу с помощью глобального регулярного выражения, представляющего только одну итерацию этой группы, и выполните итерацию по ней или используйте ее в качестве списка.
Этопохоже на вопрос, довольно похожий на этот - по крайней мере, в ответе, если не на форуме - на него ответил кто-то гораздо более компетентный в Perl, чем я: "Есть ли Perl-эквивалент Python re.findall / re.finditer(итерационные результаты регулярных выражений)? " Возможно, вы также захотите проверить ответы для этого, с более подробной информацией о правильном использовании глобальных регулярных выражений.(Perl не мой язык, я просто нездорово ценю регулярные выражения.)