Java 为什么';t glob:*匹配PathMatcher中的任何路径?
让我们有:Java 为什么';t glob:*匹配PathMatcher中的任何路径?,java,regex,glob,Java,Regex,Glob,让我们有: Path path = Paths.get("C:\\1.txt"); 以下代码打印“true”: 但以下代码打印“false”: 为什么? 我希望这两种方法都有true 根据,通配符*表示: 匹配任意数量的任意字符,包括none 详细信息: 爪哇8 视窗7 正如@T.J Crowder所说,你应该很好地遵循以下原则: PathMatcher matcher2 = FileSystems.getDefault().getPathMatcher("glob:**"); System
Path path = Paths.get("C:\\1.txt");
以下代码打印“true”:
但以下代码打印“false”:
为什么?
我希望这两种方法都有true
根据,通配符*
表示:
匹配任意数量的任意字符,包括none
详细信息:
- 爪哇8
- 视窗7
PathMatcher matcher2 = FileSystems.getDefault().getPathMatcher("glob:**");
System.out.println(matcher2.matches(path));
有关更多信息,请参见以下内容:
**个字符与跨越目录的零个或多个字符匹配
边界
与其看维基百科上的glob是什么意思,我强烈推荐。但它说的是类似的:“*字符与名称组件的零个或多个字符匹配,而不跨越目录边界。”还要注意:“**字符与零个或多个跨越目录边界的字符匹配。”也许您想要
**
(不知道,从未使用过路径匹配器
)。另外,在您链接的Wikipage中:COMMAND.COM和cmd.exe具有大多数常见语法,但有一些限制:没有[…],并且*可能只出现在模式的末尾,不是在开头。
@JorgeCampos:cmd.exe
在我的Windows 8系统上,在模式的开头加上*
。@T.J.Crowder谢谢。还要添加一件事:在调试模式下运行它,matcher的模式值对于glob://code>看起来像这样,对于glob://code>看起来像这样。
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*");
System.out.println(matcher.matches(path));
PathMatcher matcher2 = FileSystems.getDefault().getPathMatcher("glob:**");
System.out.println(matcher2.matches(path));