new(*args)
public
Constructs a new regular expression from pattern, which can be either a String or a Regexp (in which case that regexp’s options are propagated), and new options may not be specified (a change as of Ruby 1.8).
If options is an Integer, it should be one or more of the constants Regexp::EXTENDED, Regexp::IGNORECASE, and Regexp::MULTILINE, or-ed together. Otherwise, if options is not nil or false, the regexp will be case insensitive.
r1 = Regexp.new('^a-z+:\\s+\w+') #=> /^a-z+:\s+\w+/ r2 = Regexp.new('cat', true) #=> /cat/i r3 = Regexp.new(r2) #=> /cat/i r4 = Regexp.new('dog', Regexp::EXTENDED | Regexp::IGNORECASE) #=> /dog/ix
Other regular-expression modifiers
Likewise you can set Regexp::IGNORECASE directly on the regexp with the literal syntax:
/first/i # This will match "first", "First" and even "fiRSt"
Even more modifiers
-
o – Perform #{} interpolations only once, the first time the regexp literal is evaluated.
-
x – Ignores whitespace and allows comments in * regular expressions
-
u, e, s, n – Interpret the regexp as Unicode (UTF-8), EUC, SJIS, or ASCII. If none of these modifiers is specified, the regular expression is assumed to use the source encoding.
Literal to the rescue
Like string literals delimited with %Q, Ruby allows you to begin your regular expressions with %r followed by a delimiter of your choice.
This is useful when the pattern you are describing contains a lot of forward slash characters that you don’t want to escape:
%Q(http://) # This will match "http://"
Multiline regexps
A shortcut for multiline regular expressions is
/First line.*Other line/m
(notice the trailing /m)
For example:
text = <<-END Hello world! This is a test. END text.match(/world.*test/m).nil? #=> false text.match(/world.*test/).nil? #=> true