Document-class: Regexp
A Regexp holds a regular expression, used to match a pattern against strings. Regexps are created using the /.../ and %r{...} literals, and by the Regexp::new constructor.
Constants
IGNORECASE = INT2FIX(RE_OPTION_IGNORECASE)
EXTENDED = INT2FIX(RE_OPTION_EXTENDED)
MULTILINE = INT2FIX(RE_OPTION_MULTILINE)
Attributes
Cheat Sheet
I have written a short introduction and a colorful cheat sheet for Perl Compatible Regular Expressions (PCRE) as used by Ruby’s Regexp class:
http://www.bitcetera.com/en/techblog/2008/04/01/regex-in-a-nutshell/
Testing Regular Expressions?
Writing regular expressions is never easy. You may use http://rubular.com to test and optimize your regular expressions.
Eagerness
Check out this simple example:
"Hello Ruby friend".sub(/^(.*)e/, 'X') # => "Xnd" "Hello Ruby friend".sub(/^(.*?)e/, 'X') # => "Xllo Ruby friend"
The question mark turns the dotstar into non-eager mode which means it will halt on the first subsequent “e” rather than the last one. This comes in handy e.g. for Cucumber step definitions.
Okay, but not really nice:
/^I am using rvm "([^\"]*)" with gemset "(.*)"$/
Much more readable and consistent equivalent to the above:
/^I am using rvm "(.*?)" with gemset "(.*?)"$/
Loop through matches of your regular expression-based search
If you want to loop through the matches of a regular expression, String#scan is your friend. You can do something like this:
matches = '12345'.scan(/\d/) matches.each do |m| puts m end # => 1 # => 2 # => 3 # => 4 # => 5