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

Regex expression: file names that do not contain a word and matches a given pattern

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

我有以下代码行:

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));

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

注意:我不允许使用像

这样的if语句
 if(a.matches(regex1) && a.matches(regex2));

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

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

开头

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

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

如果 car 单词可能不只是在 reporttxt 之间,您可以通过将 (?!.*car).* 添加到正则表达式开头来指定它,例如 ^(?!.*car).*report((?!.*car).*)\.txt$