Split Ruby regex over multiple lines

Chowlett picture Chowlett · Sep 21, 2010 · Viewed 24.7k times · Source

This might not be quite the question you're expecting! I don't want a regex that will match over line-breaks; instead, I want to write a long regex that, for readability, I'd like to split onto multiple lines of code.

Something like:

"bar" =~ /(foo|
           bar)/  # Doesn't work!
# => nil. Would like => 0

Can it be done?

Answer

mthorley picture mthorley · Dec 11, 2013

Using %r with the x option is the prefered way to do this.

See this example from the github ruby style guide

regexp = %r{
  start         # some text
  \s            # white space char
  (group)       # first group
  (?:alt1|alt2) # some alternation
  end
}x

regexp.match? "start groupalt2end"

https://github.com/github/rubocop-github/blob/master/STYLEGUIDE.md#regular-expressions