Ruby Dir.glob 正则表达式替代
Ruby Dir.glob alternative with Regexp
Ruby 的 Dir.glob
接受具有某些正则表达式行为的 glob 字符串,但它不具备 Regexp
的全部能力。
Ruby(包括 core 和 gem)中有哪些替代方案 Dir.glob
允许使用 Regexp
来匹配文件路径?
glob 的特点是它可以匹配子路径。当你写 Dir.glob('*/*')
时,它会 return 当前目录子目录下的所有文件和目录。它可以做到这一点,因为 glob 模式对于计算机来说足够简单 - 如果它是正则表达式,它必须扫描整个文件系统并将每个路径与模式进行比较,这实在是太多了。
但是,您可以结合使用 - 使用 Dir.glob
选择 where 进行搜索,使用 grep
选择 what 搜索:
[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"]
虽然不支持完整的正则表达式,但您可以在 glob
中使用如下技巧
Dir.glob("folder_with_images/*.{jpg,png}")
Ruby 的 Dir.glob
接受具有某些正则表达式行为的 glob 字符串,但它不具备 Regexp
的全部能力。
Ruby(包括 core 和 gem)中有哪些替代方案 Dir.glob
允许使用 Regexp
来匹配文件路径?
glob 的特点是它可以匹配子路径。当你写 Dir.glob('*/*')
时,它会 return 当前目录子目录下的所有文件和目录。它可以做到这一点,因为 glob 模式对于计算机来说足够简单 - 如果它是正则表达式,它必须扫描整个文件系统并将每个路径与模式进行比较,这实在是太多了。
但是,您可以结合使用 - 使用 Dir.glob
选择 where 进行搜索,使用 grep
选择 what 搜索:
[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"]
虽然不支持完整的正则表达式,但您可以在 glob
中使用如下技巧Dir.glob("folder_with_images/*.{jpg,png}")