2011-11-17 27 views
0

我試圖做一個簡單的正則表達式來抓取特定文本出來的目錄一堆文本文件的文件目錄。我使用的代碼如下:解析與正則表達式和紅寶石

input_dir = File.join('path/to/file/dir/', "*.txt") 

Dir.glob(input_dir) do |file| 
    if /\.txt$/i.match file 
    File.open(file, "r") do |_file| 
     /==BEGIN==(.*)==END==/.match _file.read 
     puts $1 
    end 
    end 
end 

這在目錄中的文件正好是1工作,但所有其他文件返回零。我在這裏錯過了什麼嗎?

回答

1

很難用這麼少的數據來猜測,但是在大多數文件中(除了一個),==BEGIN====END==是不同的行嗎?

是否/==BEGIN==(.*)==END==/m.match _file.read改變什麼? /m修飾符允許點也匹配Ruby中的換行符。

+0

此外,要知道,'(。*)'貪婪地匹配,這可能是一個問題,如果有一個以上的'== == BEGIN'/'== == END'對在文件中。 –

+0

是的,抱歉不解釋更多。我試圖保持簡單的問題,而不會將我的整個文本文檔轉儲到其中。這就是說,這個「m」的標誌就像一個魅力。不知道_why_它的工作原理,但它的工作原理。謝謝。 –

+0

好了,沒有它,點只匹配非換行符,所以如果有間換行'== == BEGIN'和'== == END',正則表達式失敗。 –