Отрицательный взгляд ^(?!\.).+$
работает. Вот это на 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
. Возможно, это лучшее, наиболее читаемое решение, поскольку регулярное выражение в любом случае не требуется, а startsWith
равно O(1)
, где в качестве регулярного выражения (по крайней мере, в Java) используется значение O(N)
.
Обратите внимание на несогласие в пустой строке. Если это возможный ввод и вы хотите, чтобы он возвращал false
, вы можете написать что-то вроде этого:
!file.isEmpty() && !file.startsWith(".")
Смотри также