Another option:
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $str = q{one="1" two="2" three="3" ... x="y" }; my @list; while ($str =~ m/(\w+)="([^"]+)"/g){ push @list, [$1, $2]; } print Dumper \@list;
The reason why you can't put them all into $1, $2, $3, ... is that the mapping from parenthesis groups to numbers is done at the compile time of the regex.
Update: fixed small glitch in regex, pc88mxer++ for pointing out.
Second update: There is another way involving just one regex, but it uses the evil and experimental (?{...}) code assertions. Read the warnings in perlre before using it.
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $str = q{one="1" two="2" three="3" ... x="y" }; our @list; $str =~ m{ (?> (\w+) # key = "([^"]+)" # value \W* # anything inbetween (?{ push @list, [$1, $2] }) )+ }xs or die "No match"; print Dumper \@list;
In reply to Re: Regex to match "this=that" multiple times
by moritz
in thread Regex to match "this=that" multiple times
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |