在多行上拆分Ruby正则表达式

时间:2010-09-21 16:03:02

标签: ruby regex code-formatting

这可能不是你期待的问题!我不想要一个匹配换行符的正则表达式;相反,我想写一个长的正则表达式,为了便于阅读,我想分成多行代码。

类似的东西:

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

可以吗?

4 个答案:

答案 0 :(得分:103)

将%r与x选项一起使用是执行此操作的首选方法。

从github ruby​​样式指南

中查看此示例
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

答案 1 :(得分:40)

您需要使用/x修饰符,该修饰符启用free-spacing mode

答案 2 :(得分:3)

你可以使用:

"bar" =~ /(?x)foo|
         bar/

答案 3 :(得分:1)

我建议不要将正则表达式的中间部分切成小段:

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}/

我对长字符串也一样。