>perl -wMstrict -le "my @list = ( qw(CMS=11111 cms11111 cms00000011111 cms11111 cms:11111), 'cms 11111', 'cms 11111 22222 33333', 'cms 11111,22222,33333', qw(cms cmsxxxx), ); ;; my $start = qr{ \b (?: (?i) cms | cqone) \W* 0* }xms; my $then = qr{ \G [\s,]+ }xms; foreach (@list) { printf qq{'$_' -> }; my @matches = m{ (?: $start | $then) (\d+) }xmsg; printf qq{($_) } for @matches; print ''; } " 'CMS=11111' -> (11111) 'cms11111' -> (11111) 'cms00000011111' -> (11111) 'cms11111' -> (11111) 'cms:11111' -> (11111) 'cms 11111' -> (11111) 'cms 11111 22222 33333' -> (11111) (22222) (33333) 'cms 11111,22222,33333' -> (11111) (22222) (33333) 'cms' -> 'cmsxxxx' ->