What if you could change every phone number in a huge text with just one simple command?
Why Gsub with regex in Ruby? - Purpose & Use Cases
Imagine you have a long letter and you want to replace every phone number with a placeholder like "[PHONE]". Doing this by reading each line and checking every word manually is like searching for a needle in a haystack by hand.
Manually scanning text for patterns is slow and easy to mess up. You might miss some numbers or replace wrong parts. It's tiring and error-prone, especially if the text is big or the pattern changes.
Using gsub with regex lets you find all parts matching a pattern and replace them in one go. It's like having a smart highlighter that knows exactly what to change, saving time and avoiding mistakes.
text = text.split.map { |word| word.match?(/\d{3}-\d{3}-\d{4}/) ? '[PHONE]' : word }.join(' ')text.gsub(/\d{3}-\d{3}-\d{4}/, '[PHONE]')You can quickly clean or change complex text patterns automatically, making your programs smarter and faster.
Automatically hiding phone numbers or emails in user comments to protect privacy without reading each comment manually.
Manual text replacement is slow and error-prone.
gsub with regex finds and replaces patterns easily.
This makes text processing fast, reliable, and scalable.
Practice
gsub do when used with a regular expression?Solution
Step 1: Understand
Thegsubpurposegsubmethod is used to replace parts of a string that match a pattern.Step 2: Recognize regex usage
When used with a regex, it finds all matches and replaces them with the given replacement string.Final Answer:
It replaces all parts of the string that match the regex with a specified replacement. -> Option BQuick Check:
gsubwith regex = replace all matches [OK]
- Thinking gsub deletes the string
- Confusing gsub with split
- Assuming gsub returns string length
gsub and regex in Ruby?Solution
Step 1: Identify regex syntax in Ruby
Regex patterns in Ruby are enclosed in slashes, like/pattern/.Step 2: Match digits correctly
The regex/\d/matches any digit character. Using it withgsubreplaces all digits.Final Answer:
string.gsub(/\d/, "#") -> Option CQuick Check:
Regex in slashes + \d for digits = string.gsub(/\d/, "#") [OK]
- Using quotes instead of slashes for regex
- Using wrong regex like /d/ instead of /\d/
- Not escaping backslash properly
text = "Call me at 123-456-7890." result = text.gsub(/\d/, "*") puts result
Solution
Step 1: Understand the regex and replacement
The regex/\d/matches every digit character. The replacement is "*".Step 2: Apply
Every digit in the string is replaced by "*", so numbers become stars but other characters stay the same.gsubto replace digitsFinal Answer:
Call me at ***-***-****. -> Option AQuick Check:
Digits replaced by * = Call me at ***-***-****. [OK]
- Expecting only first digit replaced
- Confusing regex syntax causing error
- Thinking gsub changes non-digit characters
sentence = "Hello World!" sentence.gsub(/world/, "Earth")What is the problem?
Solution
Step 1: Check regex matching
The regex/world/is lowercase and Ruby regex is case-sensitive by default.Step 2: Compare with string content
The string has "World" with uppercase W, so the regex does not match anything.Final Answer:
Regex is case-sensitive, so 'world' does not match 'World'. -> Option AQuick Check:
Case sensitivity causes no match [OK]
- Assuming regex matches ignore case by default
- Thinking gsub needs parentheses around arguments
- Believing gsub can't use regex
data = "User: John_Doe, Email: john@example.com", which gsub call will replace all non-alphanumeric characters (except underscore) with a dash "-"?Solution
Step 1: Understand character classes
\wmatches letters, digits, and underscore.\Wmatches anything not in\w.Step 2: Analyze options
data.gsub(/[^a-zA-Z0-9_]/, "-"):/[^a-zA-Z0-9_]/matches non-alphanumeric except underscore - correct. data.gsub(/\w/, "-"):/\w/replaces word chars (alnum + _) - wrong. data.gsub(/[^a-zA-Z0-9]/, "-"):/[^a-zA-Z0-9]/replaces non-alnum including _ - wrong. data.gsub(/[\w]/, "-"):/[\w]/replaces word chars - wrong.Final Answer:
data.gsub(/[^a-zA-Z0-9_]/, "-") -> Option DQuick Check:
Explicit negated class for alphanumeric + underscore = data.gsub(/[^a-zA-Z0-9_]/, "-") [OK]
- Using /[^a-zA-Z0-9]/ which replaces underscores too
- Replacing word chars instead of non-word chars
- Confusing \w and \W meaning
Ready to prove it?
Pass the test and this pattern moves unknown
