代码之家  ›  专栏  ›  技术社区  ›  algernon

使用eachdirmatch跳过.svn文件夹

  •  2
  • algernon  · 技术社区  · 14 年前

    我正在编写一个需要遍历一组目录的程序。尝试使用以下代码:

    文件.eachdirmatch(/.*[^.svn]/){ //这里有一些代码 }

    但最终没有匹配我的目录。我知道这归根结底就是找到合适的正则表达式 羞愧地垂下头 但是,即使在重读一些Java正则表达式文档之后,我认为这也是可行的。

    4 回复  |  直到 7 年前
        1
  •  3
  •   Amber    14 年前

    请尝试此regex:

    /^(?!\.svn).*/
    

    (这假设您的语言的regex风格支持否定lookaheads。)

        2
  •  3
  •   Alexey Kiselev    12 年前

    您可以使用任何表达式作为匹配器,而不仅仅是正则表达式:

    file.eachDirMatch({ new File(it).name != ".svn" }) { dir -> println(dir.getPath()) }
    
        3
  •  2
  •   eveliotc    11 年前

    根据琥珀色的回答,整个事情看起来像

    file.eachDirMatch(~/^(?!\.svn).*/) { /* some code here */ }
    

    例如,要过滤掉当前目录中所有隐藏的目录,可以使用

    file('.').eachDirMatch(~/^(?!\.).*/) { dir ->
        println dir.getPath()
    }
    
        4
  •  1
  •   Craig    7 年前

    对于不熟悉的人(对雷格克斯来说),这看起来像胡说八道。为什么不只是做

    directories = []
    file.eachDir() { File directory -> 
        if (directory.name != ".svn") {
          directories << directory
        }
    }
    

    或者如果要忽略所有隐藏文件,请执行以下操作:

    directories = []
    file.eachDir() { File directory -> 
        if (!directory.startsWith(".")) {
          directories << directory
        }
    }
    

    一句话很好,但现在它很容易阅读(大概可以维护)