Regex捕获除以“quot;开头的文件外的所有文件&引用;
在包含混合内容的目录中,例如:Regex捕获除以“quot;开头的文件外的所有文件&引用;,regex,dotfiles,Regex,Dotfiles,在包含混合内容的目录中,例如: .afile .anotherfile bfile.file bnotherfile.file .afolder/ .anotherfolder/ bfolder/ bnotherfolder/ 除了以开头的文件(不是dir),您如何捕获所有内容? 我尝试了一个消极的前瞻^(?!\)。+?,但它似乎不起作用。 请注意,我希望通过使用[a-zA-Z]排除来避免这样做 有什么建议吗?这应该可以做到: ^[^.].*$ [^abc]将匹配任何非a、b或c的内容。。。
.afile
.anotherfile
bfile.file
bnotherfile.file
.afolder/
.anotherfolder/
bfolder/
bnotherfolder/
除了以
开头的文件(不是dir),您如何捕获所有内容?我尝试了一个消极的前瞻
^(?!\)。+?
,但它似乎不起作用。请注意,我希望通过使用
[a-zA-Z<加上所有其他可能的字符减去点>]
排除
来避免这样做
有什么建议吗?这应该可以做到:
^[^.].*$
[^abc]
将匹配任何非a、b或c的内容。。。来个负面人物课怎么样
[^.]
要排除点?转义
并对可以开始名称的字符求反,请执行以下操作:
^[^\.].*$
使用您的测试用例成功地进行了测试。反向前瞻
^(?!\)。+$
确实有效。这里是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(".")
);
}
输出为():
还要注意非正则表达式的使用。可以说,这是最好的、可读性最好的解决方案,因为无论如何都不需要正则表达式,startsWith
是O(1)
,其中正则表达式(至少在Java中)是O(N)
注意空白字符串上的不一致。如果这是一个可能的输入,并且您希望它返回false
,您可以这样编写:
!file.isEmpty() && !file.startsWith(".")
另见
-
- 在Java中,
甚至在*
模式需要模式中。DOTALL
来匹配O(N)
- 在Java中,
必须作为\.
转义。请看下面我的答案。我不认为点有括号表达式的特殊意义。以上这些对我来说很有用。看起来确实如此。很奇怪,但还行。不需要在角色类中转义。谢谢你提醒我负面类!不用花时间就可以对正则表达式生疏;)我正在看神秘的onigoruma医生,但完全错过了()。知道课堂上不需要逃跑也很好。
!file.isEmpty() && !file.startsWith(".")