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