使用Regexp的Ruby Dir.glob替代方案

问题描述 投票:1回答:2

Ruby的Dir.glob接受一个具有一些正则表达式行为的glob String,但它没有Regexp的全部功能。

Ruby中有哪些替代品(包括核心和宝石)有Dir.glob允许使用Regexp来匹配文件路径?

ruby filepath glob dir
2个回答
7
投票

glob的东西是它可以匹配子路径。当您编写Dir.glob('*/*')时,它将直接返回当前目录的子目录下的所有文件和目录。它可以做到这一点,因为glob模式足够简单,以便计算机能够理解 - 如果它是正则表达式,它将必须扫描整个文件系统并将每个路径与模式进行比较,这太过分了。

但是,您可以组合 - 使用Dir.glob选择搜索位置,并使用grep选择要搜索的内容:

[1] pry(main)> Dir.glob('/usr/lib/*').grep(/\/lib[A-Z]+\.so$/)
=> ["/usr/lib/libFLAC.so", "/usr/lib/libEGL.so", "/usr/lib/libHACD.so", "/usr/lib/libLTO.so", "/usr/lib/libGLEW.so", "/usr/lib/libGL.so", "/usr/lib/libSDL.so", "/usr/lib/libGLU.so", "/usr/lib/libSM.so", "/usr/lib/libICE.so"]

0
投票

虽然不支持完整的正则表达式,但您可以在glob中执行以下操作

Dir.glob("folder_with_images/*.{jpg,png}")
© www.soinside.com 2019 - 2024. All rights reserved.