First, you're using the wrong $data variable. Second, as Corion points out, you need to protect with if.
my $data = 'blabla;tag1=12345;blabla;tag2=99999'; my $tag1; my $tag2; $data =~ /tag1=(\d+)/; $tag1 = $1 if $1; $data =~ /tag2=(\d+)/; $tag2 = $1 if $1; # # or # # the '?' in the below regex means it'll grab the closest # tag2, and ignore any beyond it ($tag1, $tag2) = $data =~ /tag1=(\d+).*?tag2=(\d+)/ if $1 && $2; print "$tag1, $tag2";
Update: I could have sworn you were using $2 in the second match. If that was the case and you edited your post, I want to point out that when doing independent matches, the second run to get a match will re-use $1. To use $2, you need both capture groups within a single regex.
In reply to Re: ambiguous regex match
by stevieb
in thread ambiguous regex match
by Hosen1989
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |