Bird
Raised Fist0
Rubyprogramming~5 mins

Scan for all matches in Ruby - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the Ruby method String#scan do?
It searches the string for all occurrences that match a given pattern and returns them as an array.
Click to reveal answer
beginner
How do you use scan to find all words in a string?
Use scan with a regular expression like /\w+/ to find all word sequences.
Click to reveal answer
intermediate
What is the return type of scan when used with a pattern that has capture groups?
It returns an array of arrays, where each inner array contains the captured groups for each match.
Click to reveal answer
intermediate
How can you use a block with scan?
You can pass a block to scan to process each match as it is found instead of collecting them in an array.
Click to reveal answer
beginner
What happens if scan finds no matches?
It returns an empty array.
Click to reveal answer
What does "hello123".scan(/\d+/) return?
A["h", "e", "l", "l", "o"]
B["hello"]
C[]
D["123"]
Which of these returns an array of arrays when using scan?
AUsing a pattern without capture groups
BUsing a pattern with capture groups
CUsing <code>scan</code> with no arguments
DUsing <code>scan</code> on an empty string
What does "abc123def".scan(/[a-z]+/) return?
A["abc", "def"]
B["abc123def"]
C["123"]
D[]
How can you process matches one by one with scan?
ABy passing a block to <code>scan</code>
BBy calling <code>each</code> on the string
CBy using <code>match</code> instead
DBy converting the string to an array first
What does "no digits".scan(/\d+/) return?
A["0"]
B["no", "digits"]
C[]
Dnil
Explain how the Ruby scan method works to find all matches in a string.
Think about how you find all parts of a text that fit a pattern.
You got /4 concepts.
    Describe how you can use a block with scan and why it might be useful.
    Consider what happens if you want to do something with each match immediately.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the Ruby method scan do when used on a string?
      easy
      A. It counts the number of characters in the string.
      B. It replaces all matches of a pattern with another string.
      C. It finds all matches of a pattern and returns them in an array.
      D. It converts the string to uppercase.

      Solution

      1. Step 1: Understand the purpose of scan

        The scan method searches the string for all occurrences of a pattern.
      2. Step 2: Identify the return value of scan

        It returns an array containing all matched parts of the string.
      3. Final Answer:

        It finds all matches of a pattern and returns them in an array. -> Option C
      4. Quick Check:

        scan returns matches array [OK]
      Hint: Remember: scan returns all matches as an array [OK]
      Common Mistakes:
      • Confusing scan with gsub (replacement)
      • Thinking scan returns a count
      • Assuming scan modifies the original string
      2. Which of the following is the correct syntax to find all digits in a string str using scan?
      easy
      A. str.scan(/d+)
      B. str.scan("\\d+")
      C. str.scan('\d+')
      D. str.scan(/\d+/)

      Solution

      1. Step 1: Recognize the correct regex syntax in Ruby

        Ruby uses forward slashes /pattern/ to denote regular expressions.
      2. Step 2: Identify the correct regex for digits

        \d+ matches one or more digits. The pattern must be inside slashes for regex.
      3. Final Answer:

        str.scan(/\d+/) -> Option D
      4. Quick Check:

        Regex in slashes with \d+ = str.scan(/\d+/) [OK]
      Hint: Use /pattern/ for regex, not strings, in scan [OK]
      Common Mistakes:
      • Using string quotes instead of regex slashes
      • Missing escape backslash in regex
      • Using incorrect regex delimiters
      3. What is the output of the following Ruby code?
      text = "cat bat rat"
      matches = text.scan(/.at/)
      puts matches.inspect
      medium
      A. ["at", "at", "at"]
      B. ["cat", "bat", "rat"]
      C. ["c", "b", "r"]
      D. []

      Solution

      1. Step 1: Understand the regex /.at/

        The dot . matches any single character, so .at matches any three-letter word ending with 'at'.
      2. Step 2: Apply scan on the string

        The string "cat bat rat" contains "cat", "bat", and "rat" which all match the pattern.
      3. Final Answer:

        ["cat", "bat", "rat"] -> Option B
      4. Quick Check:

        scan finds all 3-letter words ending with 'at' [OK]
      Hint: Dot matches any char; scan returns all full matches [OK]
      Common Mistakes:
      • Thinking dot matches zero or multiple chars
      • Expecting partial matches like 'at' only
      • Confusing scan output with string split
      4. The following code is intended to find all words starting with 'a' in sentence. What is the error?
      sentence = "apple banana apricot avocado"
      words = sentence.scan("a\w+")
      puts words.inspect
      medium
      A. The pattern should be a regex, not a string.
      B. The pattern should use double backslashes.
      C. The method scan does not work on strings.
      D. The variable name 'words' is invalid.

      Solution

      1. Step 1: Check the argument type for scan

        The scan method expects a regex pattern, not a plain string.
      2. Step 2: Identify correct regex usage

        The pattern should be written as /a\w+/ to match words starting with 'a'.
      3. Final Answer:

        The pattern should be a regex, not a string. -> Option A
      4. Quick Check:

        scan requires regex pattern, not string [OK]
      Hint: Use /pattern/ for regex in scan, not string quotes [OK]
      Common Mistakes:
      • Passing string instead of regex to scan
      • Misunderstanding backslash escaping
      • Assuming scan modifies the string
      5. Given the string data = "log12 ID123, ID456, ID789", how can you use scan to extract only the numeric parts after each 'ID' (e.g., ["123", "456", "789"])?
      hard
      A. data.scan(/ID(\d+)/).flatten
      B. data.scan(/\d+/)
      C. data.scan(/ID\d+/)
      D. data.scan(/(ID\d+)/)

      Solution

      1. Step 1: Understand the pattern to extract numbers after 'ID'

        The regex /ID(\d+)/ matches 'ID' followed by digits, capturing only digits in parentheses. This ignores other digits like '12' in 'log12'.
      2. Step 2: Use scan and flatten the result

        scan returns an array of arrays for capture groups, so flatten converts it to a simple array of strings.
      3. Final Answer:

        data.scan(/ID(\d+)/).flatten -> Option A
      4. Quick Check:

        Capture group extracts digits, flatten simplifies array [OK]
      Hint: Use capture groups and flatten to get inner matches [OK]
      Common Mistakes:
      • Using data.scan(/\d+/) which grabs all digits including extras like '12' and '78'
      • Using scan without flatten, getting nested arrays
      • Matching full 'ID123' instead of just digits
      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