2015-11-09 3 views
1

Мне нужно выражение регулярного выражения, чтобы проверить, соответствует ли имя файла следующему шаблону: report*.txt и не содержит следующую строку «car». Так report_car_as.txt, rep_as, report_tds, он должен возвращение ложным, и report_abc.txt, report_sa.txt он должен возвращающие.Выражение выражения: имена файлов, которые не содержат слова и соответствуют заданному шаблону.

У меня есть следующие строки кода:

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(a.matches(regex1) && a.matches(regex2)); 
+0

Может быть, [ '^ (?!. * Автомобиль). * доклад [^ /] * \. TXT $ '] (https://regex101.com/r/lL0nE9/1). Или '^. * (?!. * Автомобиль) отчет [^ /] * \. Txt $'. Это зависит от того, где «автомобиль» должен быть запрещен. Или что-то вроде '^ ~ (?:/[^ /] *) * (?!. * Car) report [^ /] * \. Txt $'. –

ответ

1

В соответствии с вашими требованиями, вы можете использовать это регулярное выражение ^report((?!.*car).*)\.txt$, где:

^report означает, что ваше имя файла начинается с отчет слово

\.txt$ ваше имя файла заканчивается .txt

((?!.*car).*) - это контент между report и .txt, который содержит любые символы, кроме car (?! - отрицательный результат).

Если car слово может быть не только между report и txt, вы можете указать его, добавив (?!.*car).* к регулярному выражению самого начала, как ^(?!.*car).*report((?!.*car).*)\.txt$

Смежные вопросы