EZ

Eduzan

Learning Hub

Eduzan
Eduzan / Ruby

Ruby Regex

A regular expression, or regex, is a sequence of characters that forms a search pattern. It’s mainly used for pattern matching within strings. In Ruby, regular expressions (regex) allow us to find specific patterns within a string. Two common uses of Ruby regex are validation (such as checking email addresses) and parsing text. Regular expressions in Ruby are enclosed between two forward slashes (/).

Syntax:

# Finding the word 'hi'
"Hi there, I am using Ruby" =~ /hi/

This will return the index of the first occurrence of ‘hi’ in the string if found, otherwise, it will return nil.

Checking if a String Contains a Pattern

You can check if a string contains a regex pattern using the match method.

Example:

Match found

Checking for Specific Characters in a String

A character class lets you define a range of characters for matching. For instance, you can use [aeiou] to search for any vowel.

Example:

# Ruby program using regular expressions

# Function to check if the string contains a vowel
def contains_vowel(str)
  str =~ /[aeiou]/
end

# Driver code
puts contains_vowel("Hello")  # 'Hello' has a vowel, so it returns index
puts contains_vowel("bcd")    # 'bcd' has no vowels, returns nil, so nothing is printed

Output:

1

Common Regular Expressions

Here are some shorthand character classes for specifying ranges:

  • \w is equivalent to [0-9a-zA-Z_]
  • \d is the same as [0-9]
  • \s matches any whitespace
  • \W matches anything not in [0-9a-zA-Z_]
  • \D matches anything that’s not a number
  • \S matches anything that’s not a whitespace

The dot character . matches any character except a newline. If you want to search for the literal . character, you need to escape it with a backslash (\.).

Example:

# Ruby program using regular expressions

str1 = "2m3"
str2 = "2.5"

# . matches any character
if str1.match(/\d.\d/)
  puts "Match found"
else
  puts "Not found"
end

# Escaping the dot to match only a literal '.'
if str1.match(/\d\.\d/)
  puts "Match found"
else
  puts "Not found"
end

# This will match because str2 contains a dot between digits
if str2.match(/\d\.\d/)
  puts "Match found"
else
  puts "Not found"
end

Output:

Match found
Not found
Match found

Explanation:

1. First condition: Checks if str1 contains a digit followed by any character and then another digit (\d.\d). Since str1 contains “2m3,” it matches.
2. Second condition: Escapes the dot (\.) to match a literal .. Since str1 doesn’t contain a literal dot, it does not match.
3. Third condition: Matches because str2 (“2.5”) contains a digit, followed by a literal dot, and then another digit.

In summary, Ruby regular expressions provide a powerful way to search and match patterns within strings, allowing for complex validations and parsing tasks.

End of lesson.