Использование eachDirMatch для пропуска папок .svn - PullRequest
2 голосов
/ 26 апреля 2010

Я пишу программу, которая должна пройти через набор каталогов. Пытался использовать следующий код:

file.eachDirMatch (/.*[^. СВН] /) { // некоторый код здесь }

Но это в конечном итоге не соответствует ни одному из моих каталогов. Я понимаю, что это сводится к определению правильной регулярной выражения вешать голову в позоре , но даже после пересмотра некоторой документации Java Regular Expression я подумал, что это должно работать

Ответы [ 4 ]

3 голосов
/ 20 марта 2012

Вы можете использовать любое выражение как совпадение, а не только регулярное выражение:

file.eachDirMatch({ new File(it).name != ".svn" }) { dir -> println(dir.getPath()) }
3 голосов
/ 26 апреля 2010

Попробуйте использовать это регулярное выражение:

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

(Предполагается, что выражение вашего языка поддерживает регулярные выражения.)

2 голосов
/ 05 февраля 2013

Исходя из ответа Амбер, все выглядит как

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

Например, чтобы отфильтровать все эти скрытые каталоги в текущем каталоге, вы можете использовать

file('.').eachDirMatch(~/^(?!\.).*/) { dir ->
    println dir.getPath()
}
1 голос
/ 04 октября 2017

Для непосвященных (для регулярных выражений) это выглядит как бред. Почему бы просто не сделать

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

Или, если вы хотите игнорировать все скрытые файлы, выполните:

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

Однострочники хороши и все, но теперь их легко читать (и, по-видимому, поддерживать)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...