A regular expression can match text and capture useful parts.

regex capture Parentheses in a regular expression capture part of a match for later use.

Regex Match

email
regex_match.rb
Replay: real traced execution (multi-file project)
email = "ada@example.com"

match = email.match(/\A([^@]+)@([^@]+)\z/)

if match
  puts "user=#{match[1]}"
  puts "domain=#{match[2]}"
else
  puts "email=invalid"
end
email = "bad-email"

match = email.match(/\A([^@]+)@([^@]+)\z/)

if match
  puts "user=#{match[1]}"
  puts "domain=#{match[2]}"
else
  puts "email=invalid"
end
email = "matz@ruby.org"

match = email.match(/\A([^@]+)@([^@]+)\z/)

if match
  puts "user=#{match[1]}"
  puts "domain=#{match[2]}"
else
  puts "email=invalid"
end
  1. email ← ada@example.com, match ← ada@example.com

    1email→ ada@example.com = "ada@example.com"  #@email="bad-email", "matz@ruby.org"23match→ ada@example.com = email.match(/\A([^@]+)@([^@]+)\z/)ada@example.com
  2. if match

    5if matchada@example.com6  puts "user=#{match[1]ada}"7  puts "domain=#{match[2]example.com}"8else
    outputuser=ada
    domain=example.com
  1. email ← bad-email, match ← (empty)

    1email→ bad-email = "bad-email"23match→ (empty) = email.match(/\A([^@]+)@([^@]+)\z/)(empty)
  2. else

    7  puts "domain=#{match[2]}"8else9  puts "email=invalid"10end
    outputemail=invalid
  1. email ← matz@ruby.org, match ← matz@ruby.org

    1email→ matz@ruby.org = "matz@ruby.org"23match→ matz@ruby.org = email.match(/\A([^@]+)@([^@]+)\z/)matz@ruby.org
  2. if match

    5if matchmatz@ruby.org6  puts "user=#{match[1]matz}"7  puts "domain=#{match[2]ruby.org}"8else
    outputuser=matz
    domain=ruby.org