这可能不是您所期望的问题!我不想要一个匹配换行符的正则表达式;相反,我想写一个长的正则表达式,为了可读性,我想分成多行代码。
就像是:
"bar" =~ /(foo|
bar)/ # Doesn't work!
# => nil. Would like => 0
可以做到吗?
将 %r 与 x 选项一起使用是执行此操作的首选方法。
请参阅 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
您需要使用启用 free-spacing mode 的 /x
修饰符。
在你的情况下:
"bar" =~ /(foo|
bar)/x
regexp = /(\d+)(\d+)/x
您可以使用:
"bar" =~ /(?x)foo|
bar/
/myregex/x
之后添加修饰符,2) 您可以使用 (?on-off) 构造 /myregex(?x) with free spacing/
切换自由间距模式,3) 您可以使用 %r{myregex}x
语法.
我建议不要将正则表达式中间表达式拆分为多个部分:
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}/
我对长字符串做同样的事情。
/x
修饰符的答案,因为我不得不将 \s
洒在任何地方。拆分正则表达式要快得多,并且可以说更容易阅读和维护。
regexp = %r{/^
WRITE
EXPRESSION
HERE
$/}x