我可以通过regexp找到匹配的文件,并且还支持regexp中的组。像:
match_files('/home/(*)/**/(*).txt')
会返回类似的内容:
[ ['/home/bob/docs/abc.txt', 'bob', 'abc'], ['/home/sue/archive/docs/def.txt', 'sue', 'def'] ]
Guard会做这样的事情。我不打算匹配这个特定的正则表达式;而是匹配任何可能提供的任意正则表达式输入。
Dir.glob()通常返回一个平面数组,不支持组。我正试图找到一个库或一些技术来支持这种事情,对于DSL来说。
答案 0 :(得分:0)
我正在尝试找到一个支持这种事情的库或技巧,用于DSL。
所以你的问题似乎不合时宜,因为你要求推荐或找到一个工具或库来解决你的问题。
此外,您的问题应包括有效的代码示例:
['/home/bob/docs/abc.txt', 'bob', 'readme']
我猜它应该是
['/home/bob/docs/abc.txt', 'bob', 'abc']
无论如何......我认为这个问题非常有趣,但我认为你不能用标准库来解决它。
Dir.glob:
如果path与pattern匹配,则返回true。模式不是 正则表达式;相反,它遵循类似于shell文件名的规则 通配符。它可能包含以下元字符...
唯一合理的做法是允许特殊字符,解析字符串,提取匹配项,创建一个glob,然后将匹配应用于文件名。
答案 1 :(得分:0)
这个怎么样。
regex = %r{/home/([^/]+)/.*/([^/]+).txt}
`find .`.split.grep(regex).map { |l| l.match(regex) }.map(&:to_a)
当然可以改进。