Split Ruby regex over multiple lines

Viewed 29454

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?

5 Answers

Rather than cutting the regex mid-expression, I suggest breaking it into parts:

full_rgx = /This is a message\. A phone number: \d{10}\. A timestamp: \d*?/

msg = /This is a message\./
phone = /A phone number: \d{10}\./
tstamp = /A timestamp: \d*?/

/#{msg} #{phone} #{tstamp}/

I do the same for long strings.

regexp = %r{/^ 
            WRITE 
            EXPRESSION 
            HERE 
          $/}x
Related