Rails:查找以字符串开头但不以另一个字符串结尾的匹配项

时间:2012-11-15 04:09:03

标签: ruby-on-rails-3 match

我在这里得到了这个小东西:

def get_articles
  @articles = []
  Doc.column_names.each do |a|
    if a.match(/^article/)
      @articles << a
    end
  end
end

但它会返回许多不需要的结果。我将如何放弃以特定字符串(例如_body)返回结果的结果?

干杯!

1 个答案:

答案 0 :(得分:1)

怎么样:

if a.match(/^article/) and !a.match(/_body$/)

顺便提一下,您的方法可以重写为more compactly):

def get_articles
  @articles = Doc.column_names.select { |a| a.match(/^article/) && !a.match(/_body$/) }
end

您也可以将双重匹配替换为包含zero-width negative look-behind assertion的单个匹配,但对于大多数人来说,它的可读性较低(尽管在快速和肮脏的测试中速度提高约2倍):

def get_articles
  @articles = Doc.column_names.select { |a| a.match(/^article.*(?<!_body)$/) }
end