2014-01-20 30 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) 

当然可以改进。