我正在尝试编写一个简单的正则表达式来标识列表中以“.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");
    }

 }

正则表达式可以在在线正则表达式测试器中正常测试,但无法在程序中运行。我尝试了多种组合(例如将req拆分并复制到两个正则表达式中,或点字符的文字匹配),但是没有任何效果(即使(reg)的最简单正则表达式都返回了“不匹配”输出)。请让我知道如何解决这个问题。

最佳答案

此处的matches的主要问题是,它需要从正则表达式中匹配整个字符串。但是在您的情况下,您的正则表达式仅描述了其中的一部分。

如果您真的想在此处使用matches,则您的代码可能更像

test1.matches(".*\\.req\\.copied")
  • .表示任何字符(除了像\r这样的行分隔符之外的字符),因此,如果要使其仅表示点,则需要像\.一样对其进行转义(在字符串中,我们需要将其写为"\\.",因为\在那里也具有特殊含义-例如创建特殊字符\r \n \t等等-因此也需要通过其他\进行转义)。
  • .*将使正则表达式在.req.copied之前接受任何字符

  • 但是在您的情况下,您应该只使用endsWith方法
    test1.endsWith(".req.copied")
    

    07-24 17:50
    查看更多