使用Ruby regex匹配文件名的最有效方法

时间:2014-03-02 11:30:55

标签: ruby regex file dir

方法Dir.glob用于实现与特定模式匹配的文件名,但其参数具有类似Unix的语法(例如,使用***作为通配符一种特殊的方式等)。相反,我想使用Ruby(Onigmo)正则表达式来匹配模式来做同样的事情(使用它的通配符,量词,锚点,转义字符等)。这样做的最佳方式是什么?

我想到的一个简单方法是使用Dir.glob获取所有目录中所有现有文件的列表,并使用正则表达式过滤它们,但这看起来效率不高。或者,是吗?还有更好的方法吗?

1 个答案:

答案 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来提高效率。