1

我这里有这个小东西:

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

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

干杯!

4

1 回答 1

1

怎么样:

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

顺便说一句,您的方法可以重写(更紧凑)为:

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

您还可以将双重匹配替换为包含零宽度否定后向断言的单个匹配,但对于大多数人来说,它的可读性较差(尽管在快速和肮脏的测试中速度大约是 2 倍):

def get_articles
  @articles = Doc.column_names.select { |a| a.match(/^article.*(?<!_body)$/) }
end
于 2012-11-15T04:12:43.147 回答