代码之家  ›  专栏  ›  技术社区  ›  Eliot Sykes

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

  •  7
  • Eliot Sykes  · 技术社区  · 11 年前

    Ruby的 Dir.glob 接受具有一些正则表达式行为的globString,但它不具备 Regexp .

    Ruby中有哪些替代方案(包括核心和宝石) 目录.glob 允许使用 Regexp公司 匹配文件路径?

    2 回复  |  直到 11 年前
        1
  •  12
  •   Idan Arye    11 年前

    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"]
    
        2
  •  3
  •   Jack Kinsella    7 年前

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

    Dir.glob("folder_with_images/*.{jpg,png}")