负前瞻^(?!\.).+$
确实有效。这是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(".")
也可以看看