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 MatchData
s:
# ⇒ <MatchData "12">
# ⇒ <MatchData "34">
# ⇒ <MatchData "567">
Voilà.