Java中文件扩展名的正则表达式

Moh*_*nVS 9 java regex

我正在尝试编写一个简单的正则表达式来标识列表中以".req.copied"扩展名结尾的所有文件名.我正在使用的代码如下

public class Regextest {
 public static void main(String[] args) {
    // TODO Auto-generated method stub
 String test1=new String("abcd.req.copied");
  if(test1.matches("(req.copied)?")) {
     System.out.println("Matches");
    }
  else
     System.out.println("Does not Match");
    }

 }
Run Code Online (Sandbox Code Playgroud)

正则表达式在在线正则表达式测试中测试正常,但在程序中不起作用.我尝试了多种组合(比如拆分req并复制到两个正则表达式,或点字符的字面匹配)但没有任何效果(即使是(reg)最简单的正则表达式?返回"不匹配"输出).请让我知道如何解决这个问题.

Psh*_*emo 8

matches这里的主要问题是它需要从正则表达式匹配整个字符串.但在你的情况下,你的正则表达式只描述了它的一部分.

如果你真的想在matches这里使用你的代码看起来更像

test1.matches(".*\\.req\\.copied")
Run Code Online (Sandbox Code Playgroud)
  • .表示任何字符(除了行分隔符之外\r)所以如果你想要它只表示点你需要像它一样转义它\.(在字符串中我们需要把它写成"\\."因为\那里也有特殊含义 - 比如创建特殊字符\r \n \t等等 - 所以它还需要通过附加逃避\).
  • .* 将让正则表达式接受任何字符 .req.copied

但在你的情况下,你应该只使用endsWith方法

test1.endsWith(".req.copied")
Run Code Online (Sandbox Code Playgroud)