【问题标题】:Can I have an Array of regular expressions in ruby?我可以在 ruby​​ 中有一个正则表达式数组吗?
【发布时间】:2018-12-20 19:55:23
【问题描述】:

例如:

record= [#data retrieved from database]
expect=~ [/^69[0-9]*/, /^[0-9]*/, /^[A-Z][a-z]* [A-Z][a-z]*/, /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[0-9]{2}[0-9]{4}/]

if(record[0]== expect[0])
  puts("Pass")
else
  puts("Fail")
end

如果有更复杂的方法请告诉我,但我也想知道这样的方法是否可以参考。

【问题讨论】:

    标签: arrays ruby regex automated-tests


    【解决方案1】:

    我可以在 ruby​​ 中有一个正则表达式数组吗?

    是的。

    如果有更复杂的方法[测试给定字符串是否匹配所有正则表达式]?

    使用Enumerable#all?

    patterns = [/foo/, /bar/]
    input = 'baz'
    patterns.all? { |pattern| pattern.match?(input) }
    

    match? 是最近在 ruby​​ 2.4 中添加的。

    【讨论】:

    • 另外,如果你有一些不同正则表达式的情况,你可以在when子句中列出它们。
    • 太棒了谢谢你的回答!不幸的是,我的工作使用 Ruby 2.3.3 是否有与“.match”等效的方法?在这个版本中?
    • 回复:“不幸的是,我的工作使用 Ruby 2.3.3,在这个版本中有与“.match”等效的方法吗?” - 答:不,但您可以改用=~
    • @JaredBeck 我认为在这种情况下它应该是 patterns.any? ,否则 all 正则表达式需要匹配才能返回 true。
    【解决方案2】:

    您可以尝试=== 运算符,当遵循正则表达式文字时,它允许您与字符串进行比较。

    /^[a-z]*$/ === "HELLO" #=> false
    /^[A-Z]*$/ === "HELLO" #=> true
    

    但我也建议查看 =~ 的文档。

    【讨论】:

      猜你喜欢
      • 2014-03-28
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 2010-09-29
      • 2011-08-24
      • 2020-05-31
      • 1970-01-01
      • 2010-11-02
      相关资源
      最近更新 更多