When somebody needs to find all occerences of a pattern in a string, she usually does either scan or repeatitive match calls. I was unable to google a quick solution of getting all the MatchData instances. Even StackOverflow provides a strange answers on a topic, like that one below:

str.to_enum(:scan, /PATTERN/).map { Regexp.last_match }

Actually, the owls are easier than they seem. All we need is to use one of a cryptic $ ruby globals:

input = "abc12def34ghijklmno567pqrs"
numbers = /\d+/
input.gsub(numbers) { |m| p $~ }

prints all the MatchDatas:

# ⇒ <MatchData "12">
# ⇒ <MatchData "34">
# ⇒ <MatchData "567">

Voilà.