Split Ruby regex over multiple lines
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 li开发者_如何转开发nes of code.
Something like:
"bar" =~ /(foo|
bar)/ # Doesn't work!
# => nil. Would like => 0
Can it be done?
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
You need to use the /x
modifier, which enables free-spacing mode.
In your case:
"bar" =~ /(foo|
bar)/x
you can use:
"bar" =~ /(?x)foo|
bar/
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
精彩评论