如何将正则表达式分解为多行?

时间:2013-10-16 17:30:15

标签: ruby ruby-on-rails-3

我在rails应用程序中构建了一个自定义验证器,确保地址格式如下:

  

收件人姓名:

     

地址第1行:

     

地址第2行:

     

城市:

     

州:

     

邮政编码:

- 或 -

  

银行帐号:

     

银行路由号码:

     

银行帐户类型:

我已经实现了以下帮助方法来检查地址是否与这些模式之一不匹配:

def malformed_check(address)
  address !~ /^Recipient Name:(.*)$\n^Address Line 1:(.*)$\n(^Address Line 2:(.*)$\n)?^City:(.*)$\n^State:(.*)$\n^ZIP Code:(.*)$/
end

def malformed_ach(address)
  address !~ /^Bank Account Number:(.*)$\n^Bank Routing Number:(.*)$\n^Bank Account Type:(.*)$/
end

我的问题是:如何在多行中打破我的正则表达式?

我们的编码标准每行最多120个字符。

2 个答案:

答案 0 :(得分:5)

/x自由空间修改器允许您在多行上使用正则表达式,例如

address !~ /^Recipient Name:(.*)$\n
            ^Address Line 1:(.*)$\n
           (^Address Line 2:(.*)$\n)?
            ^City:(.*)$\n
            ^State:(.*)$\n
            ^ZIP Code:(.*)$/x

答案 1 :(得分:1)

我希望“Free-Spacing Regular Expressions”可以帮到你!

对于Ruby,请查看Regexp文档,其中包含:

  

正则表达式的结束分隔符后面可以跟一个或多个单字母选项,后者控制模式的匹配方式。

/pat/i - Ignore case
/pat/m - Treat a newline as a character matched by .
/pat/x - Ignore whitespace and comments in the pattern
/pat/o - Perform #{} interpolation only once
  

... x选项启用自由间隔模式。模式中的文字空格被忽略,octothorpe(#)字符引入注释直到行尾。这允许以可能更易读的方式组织模式的组件。

     

注意:要匹配x模式中的空格,请使用转义符,例如\ s或\ p {Space}。