my $string_old = "<*2>H<2:0>,I<3:0>,<*2>P<4:0:2>"; my $string = "<*2>P<4:0:2>"; if(my@matches = ($string =~ /^<\*(\d+)>(\S{1})<(\d+):(\d+):(\d+)>$/)) { print "Matched ",join(" ", @matches),"\n"; } #printouts # orginal regex matched: # Matched 2 H<2:0>,I<3:0>,<*2>P 4 0 2 #new regex matches (old one did this too) #Matched 2 P 4 0 2