ruby - 使用 Ruby 正则表达式匹配文件名的最有效方法

标签 ruby regex file dir

方法 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/

相关文章:

java -\G 在 PCRE 后视中如何工作

file - 如何使用 sox 合并多个音频文件

将文本文件的数据转换为变量

ruby-on-rails - 如何做一个更好的零检查?

javascript - 正则表达式用重复模式替换一行

ruby - 使用 Geany 美化 Ruby 源代码

c# - Regex.IsMatch 不应该返回 true

php - 从文本文件中读取特定行

ruby - 如何知道我们在 .each_slice 的 "the last round"

php - Apache:支持 [PHP|Python|Ruby] 的虚拟主机