0

名前付きrexegキャプチャグループを使用していて、caseステートメントはで機能しますmatchが、不要なデータが表示されます。以下のコードを実行すると、1つのステートメントに一致するようにのみ機能します。どこが間違っているのですか?

File::open(file).lines do |line|
    case
      when line.scan(regex1) then puts line.scan(regex1)
      when line.scan(regex2) then puts line.scan(regex2)
      when line.scan(regex3) then puts line.scan(regex3)
    end
  end
end
4

1 に答える 1

4

case最初の真の式を実行します。

複数のチェックがあり、各チェックが true になる可能性がある場合は、複数のifステートメントを使用する必要があります。

File::open(file).lines do |line|
  puts line.scan(regex1) if line.scan(regex1)
  puts line.scan(regex2) if line.scan(regex2)
  puts line.scan(regex3) if line.scan(regex3)
end

次のバージョンは、もう少し柔軟で効率的だと思います。

File::open(file).lines do |line|
  [ regex1, regex2, regex3] do |regex|
    if result =  line.scan(regex)
            puts result
    end
  end
end
于 2012-09-18T21:03:49.707 に答える