PatternSyntaxException

Can*_*ner 5 java regex patternsyntaxexception

以下字符串导致PatternSyntaxException:

Pattern.compile("*\\.*");
Run Code Online (Sandbox Code Playgroud)

我想创建一个模式,以便我可以使用以下格式过滤所有具有名称的文件: "*.*"

我怎样才能做到这一点?

aio*_*obe 3

要匹配.名称中包含 a 的所有字符串,您可以:

Pattern.compile(".*[.].*");
Run Code Online (Sandbox Code Playgroud)

分解它:

  • .*匹配任意数量的任意字符
  • [.]匹配一个点。(是的,\\.也有效)
  • .*匹配任意数量的任意字符

演示:

Pattern p = Pattern.compile(".*[.].*");

System.out.println(p.matcher("hello.txt").matches()); // true
System.out.println(p.matcher("hellotxt").matches());  // false
Run Code Online (Sandbox Code Playgroud)

请注意,只有一个点的字符串"."也匹配。为了确保点前面和后面都有一些字符,您可以将 : 更改*+: .+[.].+


你得到的原因PatternSyntaxException

*运算符被解释为“前一个字符重复零次或多次”。由于您开始表达时*没有可重复的字符,因此引发了异常。