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

正如@T.J Crowder所说,你应该很好地遵循以下原则:

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));