use re 'multi_captures'; ":aa2bb4cc6dd8" =~ / (:) (?: (\w\w) (\d) )* /x; dd $&; #-> ":aa2bb4cc6dd8" dd $1; #-> ":" dd $2; #-> ["aa", "bb", "cc", "dd"] dd $3; #-> [2, 4, 6, 8]