📖 Scenario: You are working on a simple text analyzer that looks for specific words in sentences. You want to find if the word "cat" appears in a sentence and get details about where it appears.
🎯 Goal: Build a Ruby program that uses the match method to find the word "cat" in a sentence and then uses the MatchData object to extract information about the match.
📋 What You'll Learn
Create a string variable called sentence with the exact value "The black cat sat on the mat."
Create a regular expression variable called pattern that matches the word "cat"
Use the match method on sentence with pattern and store the result in a variable called match_data
Print the entire matched word from match_data
Print the starting index of the match from match_data
💡 Why This Matters
🌍 Real World
Finding specific words or patterns in text is common in search engines, text editors, and data analysis.
💼 Career
Understanding how to use regular expressions and match data is useful for roles in software development, data processing, and quality assurance.
Progress0 / 4 steps
1
Create the sentence string
Create a string variable called sentence with the exact value "The black cat sat on the mat."
Ruby
Hint
Use double quotes around the sentence exactly as shown.
2
Create the pattern to match the word 'cat'
Create a regular expression variable called pattern that matches the exact word "cat"
Ruby
Hint
Use slashes / to create the regular expression.
3
Use the match method to find 'cat' in the sentence
Use the match method on sentence with pattern and store the result in a variable called match_data
Ruby
Hint
Call match on sentence with pattern as argument.
4
Print the matched word and its starting index
Print the entire matched word from match_data[0] and then print the starting index of the match from match_data.begin(0)
Ruby
Hint
Use puts to print each value on its own line.
Practice
(1/5)
1. What does the Ruby match method return when it finds a pattern in a string?
easy
A. A MatchData object containing details of the match
B. The matched substring as a string
C. An array of all matched substrings
D. A boolean value true
Solution
Step 1: Understand the purpose of match
The match method searches a string for a pattern and returns information about the match.
Step 2: Identify the return type when a match is found
It returns a MatchData object, which holds details like matched text and position.
Final Answer:
A MatchData object containing details of the match -> Option A
Quick Check:
match returns MatchData [OK]
Hint: Remember: match returns MatchData, not just string [OK]
Common Mistakes:
Thinking it returns just the matched string
Assuming it returns an array of matches
Believing it returns true/false
2. Which of the following is the correct syntax to use the match method on a string str to find the pattern /abc/?
easy
A. /abc/.match(str)
B. match(str, /abc/)
C. str.match(/abc/)
D. str.match = /abc/
Solution
Step 1: Recall the method call format
The match method is called on a string object with a regex pattern as argument.
Step 2: Check each option's syntax
str.match(/abc/) correctly calls str.match(/abc/). match(str, /abc/) is invalid syntax. /abc/.match(str) reverses receiver and argument. str.match = /abc/ tries assignment, which is wrong.
Final Answer:
str.match(/abc/) -> Option C
Quick Check:
Correct method call = str.match(/abc/) [OK]
Hint: Call match on string with regex inside parentheses [OK]
Common Mistakes:
Using match as a standalone function
Swapping receiver and argument
Trying to assign with =
3. What will be the output of the following Ruby code?
result = "hello123".match(/\d+/)
puts result[0]
medium
A. 123
B. hello
C. nil
D. An error is raised
Solution
Step 1: Understand the regex pattern
The pattern /\d+/ matches one or more digits in the string.
Step 2: Analyze the match and output
In "hello123", digits "123" match. result[0] accesses the matched substring "123".
Final Answer:
123 -> Option A
Quick Check:
Digits matched = "123" [OK]
Hint: Access matched text with result[0] after match [OK]
Common Mistakes:
Expecting the whole string as output
Confusing nil with empty string
Not using index 0 to get matched text
4. Consider this Ruby code snippet:
text = "abc"
match = text.match(/d/)
puts match[0]
What is the problem here?
medium
A. The regex pattern is invalid
B. Trying to access match[0] when match is nil
C. The string text is empty
D. The match method does not exist for strings
Solution
Step 1: Check the regex pattern and string
The pattern /d/ looks for 'd' in "abc", which is not present, so match returns nil.
Step 2: Identify the error cause
Trying to do match[0] when match is nil causes a NoMethodError.
Final Answer:
Trying to access match[0] when match is nil -> Option B
Quick Check:
Accessing [0] on nil causes error [OK]
Hint: Check if match is nil before accessing [OK]
Common Mistakes:
Assuming pattern is invalid
Ignoring that match can be nil
Thinking match method is missing
5. You want to extract the first word starting with a capital letter from the string "today is a Sunny day" using match. Which code correctly does this and prints the matched word?
hard
A. puts "today is a Sunny day".match(/[A-Z]+/)[0]
B. puts "today is a Sunny day".match(/[a-z]\w*/)[0]
C. puts "today is a Sunny day".match(/\b\w+/)[0]
D. puts "today is a Sunny day".match(/[A-Z]\w*/)[0]
Solution
Step 1: Understand the regex requirements
We want the first word starting with a capital letter. Pattern /[A-Z]\w*/ matches a capital letter followed by zero or more word characters.
Step 2: Analyze each option
puts "today is a Sunny day".match(/[A-Z]\w*/)[0] matches correctly and returns the first capitalized word "Sunny". puts "today is a Sunny day".match(/[a-z]\w*/)[0] matches lowercase start, first is "today", wrong. puts "today is a Sunny day".match(/\b\w+/)[0] matches any word, first is "today", not capitalized. puts "today is a Sunny day".match(/[A-Z]+/)[0] matches only consecutive capital letters, first is "S", not full word.
Final Answer:
puts "today is a Sunny day".match(/[A-Z]\w*/)[0] -> Option D
Quick Check:
Capitalized word match = puts "today is a Sunny day".match(/[A-Z]\w*/)[0] [OK]
Hint: Use regex starting with [A-Z] and access [0] from match [OK]
Common Mistakes:
Using lowercase letter class instead of uppercase
Matching only letters without full word
Not accessing matched text with [0]
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.