2012-09-18 51 views
0

我使用的是命名rexeg捕獲組,我的case語句與match一起使用,但是它給了我不想要的數據。當我運行下面的代碼時,它只能用來匹配一條語句。我哪裏錯了?Ruby中的案例語句(line.scan)

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

case執行第一個true-expresion。

如果您有多個支票,每個支票都可以是真實的,那麼您應該使用多重if -statements。

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 
+0

感謝您的澄清和額外的例子,但實際上我不打算只打印正則表達式。我可以看到在未來有用。 –