As you are using capturing brackets within your regex, your required substrings are already being placed into the variables $1 $2 $3, so there is no need to use substr to isolate the substrings a second time. The only tricky bit is that $3 may have no value, so I've used grep to exclude it if it has no value.
#! perl -slw use strict; use Data::Dumper; my $regex = qr/(\d\d):(\d\d)(?::(\d\d))?/; # 01234567890123456 my $string = "11:30 or 11:29:53"; my $res; $res->{$-[0]} = [grep $_, $1, $2, $3] while $string =~ /$regex/g; print Dumper $res; __END__ c:\test>225814 $VAR1 = { '0' => [ '11', '30' ], '9' => [ '11', '29', '53' ] }; c:\test>
Examine what is said, not who speaks.
The 7th Rule of perl club is -- pearl clubs are easily damaged. Use a diamond club instead.
In reply to Re: Re: Re: Multiple matches of a regex
by BrowserUk
in thread Multiple matches of a regex
by pike
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |