Regex для ловли всех файлов, но тех, которые запускаются с “.”

В каталоге со смешанным содержанием, таким как:

.afile
.anotherfile
bfile.file
bnotherfile.file
.afolder/
.anotherfolder/
bfolder/
bnotherfolder/

Как Вы поймали бы все кроме файлов (не директора) запускающийся с .?
Я попробовал отрицательным предвидением ^(?!\.).+? но это, кажется, не работает правильно.
Обратите внимание на то, что я хотел бы постараться не делать его исключением . при помощи [a-zA-Z< plus all other possible chars minus the dot >]

Какие-либо предложения?

7
задан tshepang 31 March 2014 в 20:50
поделиться

4 ответа

Это должно помочь:

^[^.].*$

[^abc] будет соответствовать всему, что не a, b или c

18
ответ дан 6 December 2019 в 09:18
поделиться

Отрицательный просмотр вперед ^ (?! \.). + $ работает. Вот оно в Java:

    String[] files = {
        ".afile",
        ".anotherfile",
        "bfile.file",
        "bnotherfile.file",
        ".afolder/",
        ".anotherfolder/",
        "bfolder/",
        "bnotherfolder/",
        "", 
    };
    for (String file : files) {
        System.out.printf("%-18s %6b%6b%n", file,
            file.matches("^(?!\\.).+$"),
            !file.startsWith(".")
        );
    }

Результатом является (, как показано на ideone.com ):

.afile              false false
.anotherfile        false false
bfile.file           true  true
bnotherfile.file     true  true
.afolder/           false false
.anotherfolder/     false false
bfolder/             true  true
bnotherfolder/       true  true
                    false  true

Обратите внимание также на использование нерегулярного выражения String.startsWith . Возможно, это лучшее и наиболее читаемое решение, потому что регулярное выражение в любом случае не требуется, а startWith равно O (1) , где как регулярное выражение (по крайней мере, в Java) - O (N) .

Обратите внимание на разногласия по пустой строке. Если это возможный ввод, и вы хотите, чтобы он возвращал false , вы можете написать что-то вроде этого:

!file.isEmpty() && !file.startsWith(".")

См. Также

1
ответ дан 6 December 2019 в 09:18
поделиться

Как насчет класса отрицательных символов?

[^.]

чтобы исключить точку?

0
ответ дан 6 December 2019 в 09:18
поделиться

Побег и отрицание символов, с которых может начинаться имя, у вас есть:

^[^\.].*$

Успешно протестировано с вашими тест-кейсами здесь.

1
ответ дан 6 December 2019 в 09:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: