in reply to How do I reference repeated capture groups?

Two possible techniques come to mind

I'm mobile now and can only provie code examples by the night. (But others will be faster )

For details see perlretut and other linked docs

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery

Edit

https://perldoc.perl.org/perlretut#Global-matching

https://perldoc.perl.org/perlretut#A-bit-of-magic:-executing-Perl-code-in-a-regular-expression

Replies are listed 'Best First'.
Re^2: How do I reference repeated capture groups?
by LanX (Saint) on Aug 12, 2022 at 19:39 UTC
      to meet these explicit requirements, here an altered version.

      NB: how similar those solutions look like in the end...

      use v5.12; use warnings; use Data::Dump; my $str = 'a 1 2 3 b 4 5 6'; my $re_start = qr{(?<start>\w+)\s*}; my $re_repeat = qr{\s*(?<repeat>\d+)\s*}; # --- approach 1 with \G and /gc my @res1; while ( $str =~ /\G$re_start/g ) { push @res1, [$+{start}]; while ($str =~ /\G$re_repeat/gc) { push @{ $res1[-1] }, $+{repeat}; } } dd \@res1; # --- approach 2 with embedded (?{CODE}) my @res2; $str =~ / (?: $re_start (?{ push @res2, [$+{start}] }) (?: $re_repeat (?{ push @{ $res2[-1] }, $+{repeat} }) )* )* /gx; dd \@res2;

      output
      [["a", 1, 2, 3], ["b", 4, 5, 6]] [["a", 1, 2, 3], ["b", 4, 5, 6]]

      Cheers Rolf
      (addicted to the Perl Programming Language :)
      Wikisyntax for the Monastery