2014-01-20 31 views
-1

我可以通過regexp找到匹配的文件,並且還支持正則表達式中的組。像:使用正則表達式組捕獲查找文件名

match_files('/home/(*)/**/(*).txt') 

將返回類似:

[ ['/home/bob/docs/abc.txt', 'bob', 'abc'], ['/home/sue/archive/docs/def.txt', 'sue', 'def'] ] 

衛隊做這樣的事情。我不想匹配這個特定的正則表達式;而是匹配任何可能提供的任意正則表達式輸入。 Dir.glob()通常返回一個平面數組,不支持組。我試圖找到一個圖書館或一些技術來支持這種事情,對於DSL。

+0

那麼你有什麼嘗試?我們需要看到你的嘗試。 –

+0

我試過Dir.glob(),正如問題所暗示的那樣,這會產生空的結果。我試圖查找任何可能做到的圖書館或API,但找不到任何圖書館或API。 – mahemoff

+1

尋找圖書館的請求不在話下,但由於這個問題也要求「或某種技術」,我會投票保留開放。 –

回答

0

我試圖找到一個圖書館或技巧,將支持這種事情,爲DSL。

所以你的問題似乎是脫離主題,因爲你要求推薦或找到一個工具或庫來解決你的問題。

而且,你的問題應該包括有效的代碼示例:

['/home/bob/docs/abc.txt', 'bob', 'readme'] 

我想它應該意味着

['/home/bob/docs/abc.txt', 'bob', 'abc'] 

反正...我認爲這個問題很有趣,但我不」我認爲你不能用標準庫來解決它。

Dir.glob:如果路徑對模式匹配

返回true。該模式不是 正則表達式;相反,它遵循類似shell文件名 globbing的規則。它可能包含以下元字符...

唯一合理的做法是允許特殊字符,解析字符串,提取匹配項,創建一個glob,然後將匹配應用於文件名。

+0

「自述」是一個錯字,已更新。問題在於主題。您引用的摘錄要求提供圖書館或「竅門」,這意味着我將以任何方式解決問題。 – mahemoff

0

這個怎麼樣。

regex = %r{/home/([^/]+)/.*/([^/]+).txt} 
`find .`.split.grep(regex).map { |l| l.match(regex) }.map(&:to_a) 

當然可以改進。