Bird
Raised Fist0
Rubyprogramming~10 mins

Match method and MatchData in Ruby - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Match method and MatchData
Call str.match(pattern)
↓
Search for pattern in str
↓
Return MatchData
↓
Use MatchData to access captures or positions
The match method searches a string for a pattern. If found, it returns a MatchData object with details; if not, it returns nil.
Execution Sample
Ruby
text = "hello123"
result = text.match(/(\w+)(\d+)/)
puts result[0]
puts result[1]
puts result[2]
This code matches letters followed by digits in a string and prints the full match and captured groups.
Execution Table
StepActionEvaluationResult
1Call text.match(/(\w+)(\d+)/)Search 'hello123' for patternMatch found: 'hello123'
2Access result[0]Full matched string'hello123'
3Access result[1]First capture group (\w+)'hello'
4Access result[2]Second capture group (\d+)'123'
5If no matchReturns nilnil (not reached here)
💡 Pattern found in string, so MatchData returned and used to access captures.
Variable Tracker
VariableStartAfter matchAfter accessing capturesFinal
text"hello123""hello123""hello123""hello123"
resultnilMatchData object for 'hello123'Same MatchDataSame MatchData
Key Moments - 2 Insights
Why does result[0] give the full matched string, not just the first capture?
Because in MatchData, index 0 always holds the entire matched substring, while indexes 1 and up hold capture groups (see execution_table rows 2 and 3).
What happens if the pattern is not found in the string?
The match method returns nil, so trying to access result[0] would cause an error. This is shown in execution_table row 5.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what does result[1] contain at step 3?
AThe first capture group 'hello'
BThe full matched string 'hello123'
CThe second capture group '123'
Dnil
💡 Hint
Check execution_table row 3 where result[1] is accessed.
At which step does the match method confirm no match was found?
AStep 3
BStep 5
CStep 1
DStep 2
💡 Hint
Look at execution_table row 5 describing no match case.
If the string was 'abc' and pattern /(\d+)/ was used, what would result be?
AMatchData with 'abc'
BMatchData with digits
Cnil
DError
💡 Hint
Refer to key_moments about no match returning nil.
Concept Snapshot
match(pattern) searches a string for a pattern.
Returns MatchData if found, else nil.
MatchData[0] is full match.
MatchData[1..] are capture groups.
Check for nil before accessing captures.
Full Transcript
The Ruby match method looks for a pattern inside a string. If it finds the pattern, it returns a MatchData object. This object holds the full matched text at index 0 and any captured groups at indexes 1 and beyond. If the pattern is not found, match returns nil. You can access parts of the match using result[0], result[1], etc. Always check if the result is nil before accessing captures to avoid errors.

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

  1. Step 1: Understand the purpose of match

    The match method searches a string for a pattern and returns information about the match.
  2. Step 2: Identify the return type when a match is found

    It returns a MatchData object, which holds details like matched text and position.
  3. Final Answer:

    A MatchData object containing details of the match -> Option A
  4. 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

  1. Step 1: Recall the method call format

    The match method is called on a string object with a regex pattern as argument.
  2. 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.
  3. Final Answer:

    str.match(/abc/) -> Option C
  4. 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

  1. Step 1: Understand the regex pattern

    The pattern /\d+/ matches one or more digits in the string.
  2. Step 2: Analyze the match and output

    In "hello123", digits "123" match. result[0] accesses the matched substring "123".
  3. Final Answer:

    123 -> Option A
  4. 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

  1. Step 1: Check the regex pattern and string

    The pattern /d/ looks for 'd' in "abc", which is not present, so match returns nil.
  2. Step 2: Identify the error cause

    Trying to do match[0] when match is nil causes a NoMethodError.
  3. Final Answer:

    Trying to access match[0] when match is nil -> Option B
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    puts "today is a Sunny day".match(/[A-Z]\w*/)[0] -> Option D
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard