new
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 a Fixnum, 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, 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('dog', Regexp::EXTENDED) #=> /dog/x r4 = Regexp.new(r2) #=> /cat/i
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