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 に答える