方法 Dir.glob
用于实现匹配特定模式的文件名,但其参数具有类 Unix 语法(例如,使用 *
、**
作为特定方式的通配符等)。相反,我想使用 Ruby (Onigmo) 正则表达式作为匹配模式来执行相同的操作(使用其通配符、量词、 anchor 、转义字符等)。最好的方法是什么?
想到的一种简单方法是使用 Dir.glob 获取所有目录中所有现有文件的列表,并使用正则表达式过滤它们,但这看起来效率不高。或者,是吗?有更好的办法吗?
最佳答案
您可以尝试Find module在 Ruby 的标准库中。
require 'find'
Find.find(path).grep(/regex/)
find 方法以递归方式返回您作为参数提供的路径中存在的每个路径,与您在 Dir.glob 中提到的非常相似。然后,您可以使用内置的 grep 方法通过正则表达式过滤结果。
但这可能不是最有效的方法,因为 Dir.glob 是用 C 编写的,而 Find 模块是用 Ruby 编写的。我对我的主目录进行了测试,Find 比 Dir.glob 花费了更长的时间才能获得结果,但您也可以使用 Find 模块的修剪方法,以免下降到特定文件夹,这可以帮助提高效率使用查找。
关于ruby - 使用 Ruby 正则表达式匹配文件名的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22126984/