正则表达式:不包含单词并与给定模式匹配的文件名

时间:2015-11-09 09:07:39

标签: java regex regex-negation

我需要一个正则表达式来检查文件名是否与以下模式匹配: report*.txt并且不包含以下字符串“car”。 因此,对于report_car_as.txtrep_asreport_tds,它应该 返回false ,对于report_abc.txt,{{1}应该 返回true

我有以下代码行:

report_sa.txt

我不知道如何组合这两个正则表达式。你能帮帮我吗?

注意:我不允许使用像

这样的if语句
final File f = new File("~/home/report_fds.txt");
final String regex1 = "^((?!car).)*$";
final String regex2 = "report.*\\.txt";
System.out.println(f.getName().matches(regex2));

1 个答案:

答案 0 :(得分:2)

根据您的要求,您可以使用此正则表达式^report((?!.*car).*)\.txt$,其中:

^report表示您的文件名以报告字

开头

\.txt$您的文件名以.txt

结尾

((?!.*car).*)report.txt之间的内容,其中包含任何字符,但car序列除外(?!为负前瞻)。

如果car字不能只在reporttxt之间,您可以通过将(?!.*car).*添加到正则表达式开头来指定它,例如{{1} }}