Regex Match Scan Grep Methods Readme


  • Use the match method
  • Use capture groups
  • Use the scan method
  • Understand the diff between match and scan


You've learned the basics of writing Regular Expressions in Ruby. In this lesson we'll learn how to use regular expressions with the match and scan ruby methods. We'll also learn to use capture groups.


The scan method returns an array of all items in your string that match a given Regular Expression. For example:

"The rain in Spain lies mainly in the plain".scan(/\w+ain/)
# => ["rain", "Spain", "main", "plain"]


The match method returns the first item in your string that matches a given Regular Expression as a MatchData object. For example:

"The rain in Spain lies mainly in the plain".match(/\w+ain/)
# => #<MatchData "rain">

"The rain in Spain lies mainly in the plain".match(/France/)
# => nil

More often than not, we use the result of the match method as a boolean, indicating the existence of the pattern in the given string.


Grep is an enumerable method for pattern searching in arrays and hashes. Similar to scan, grep will return an array of matching items from an array.

names = ["Jeri Faria", "Althea Voth", "Audry Donoho", "Scotty Chaves", "Lance Barrio", "Zachary Newhall", "Stefany Janey", "Tressie Kinsel", "Raven Grimsley", "Marketta Gaylor", "Leota Crowe", "Mazie Norman", "Damien Loffredo"]

#Get items from array where first name has five letters:
# => ["Audry Donoho", "Lance Barrio", "Raven Grimsley", "Leota Crowe", "Mazie Norman"]

Capture Groups

Using parentheses in our RegEx allows us to create 'groups' that we can refer to in our scan/match/grep methods as indexes in an array. In the example below we create three capture groups for the three sets of digits in a phone number. Now, when we scan a list of numbers, each phone number is broken down into subgroups based on the capture groups we built in our regular expressions:

numbers = "202-555-0192 202-555-0147 202-555-0131 202-555-0116 202-555-0192 202-555-0197"

number_breakdown = numbers.scan(/(\d+)-(\d+)-(\d+)/)
# => [["202", "555", "0192"], ["202", "555", "0147"], ["202", "555", "0131"], ["202", "555", "0116"], ["202", "555", "0192"], ["202", "555", "0197"]]

# => ["202", "555", "0192"]

# => "555"
Unlock your future in tech
Learn to code.

Learn about Flatiron School's Mission

With a new take on education that falls somewhere between self-taught prodigy and four-year computer science degree, the Flatiron School promises to turn students with little programming experience into developers.

In the six months since the Manhattan coding school was acquired by WeWork, it has spawned locations in Washington, D.C., Brooklyn, and London. Now, WeWork is opening a fourth Flatiron School location, this time in Houston.

Adam Enbar, Flatiron School's cofounder, believes now is the time to grow. "How the world is changing has impacted working and learning in very similar ways. We think education fundamentally is about one thing: enabling people to pursue a better life."

Learn. Love. Code.
Students come to Flatiron School to change their lives. Join our driven community of career-changers and master the skills you need to become a software engineer or a data scientist.
Find Us