方法Dir.glob
用于实现与特定模式匹配的文件名,但其参数具有类似Unix的语法(例如,使用*
,**
作为通配符一种特殊的方式等)。相反,我想使用Ruby(Onigmo)正则表达式来匹配模式来做同样的事情(使用它的通配符,量词,锚点,转义字符等)。这样做的最佳方式是什么?
我想到的一个简单方法是使用Dir.glob
获取所有目录中所有现有文件的列表,并使用正则表达式过滤它们,但这看起来效率不高。或者,是吗?还有更好的方法吗?
答案 0 :(得分:2)
您可以在Ruby的标准库中尝试Find module。
require 'find'
Find.find(path).grep(/regex/)
find方法以递归方式返回您作为参数提供的路径中存在的每个路径,这与您在Dir.glob中提到的非常相似。然后,您可以使用内置的grep方法使用正则表达式过滤结果。
这可能不是最有效的方法,因为Dir.glob是用C语言编写的,而Find模块是用Ruby编写的。我在我的主目录上做了一个测试,得到的结果比Dir.glob要长一点,但你也可以使用Find模块的剪枝方法,以便不进入特定的文件夹,这可能会有所帮助使用Find来提高效率。