Выберите файл по имени - PullRequest
1 голос
/ 02 июля 2019

В моем каталоге есть следующий шаблон имени файла:

1.Pattern
2018_09_01_Filename.java

или

2.Шаблон
kit-deploy-190718_Filename.java

Теперь я пытаюсь выбрать каждый файл в каталоге, который соответствует первому шаблону (дата может отличаться, но этовсегда год_месяца_день ).Но я не получаю дальше.

Я думал, что смогу отделить базовое имя от файла, чтобы получить первые десять символов.Тогда я посмотрю, соответствует ли это шаблону.

my $filename = basename($file);

my $chars = substr($filename, 0 , 10);

if ($chars =~ m/2000_01_01/) {

    print "match\n";

}
else {
    print "Don't match";
}

1 Ответ

3 голосов
/ 02 июля 2019

Вам просто нужно регулярное выражение, соответствующее вашим потребностям, например:

#!/usr/bin/perl

my $filename = "2018_09_01_Filename.java";


if ($filename =~ m/\D?20\d{2}_\d{2}_\d{2}\D?/) {
    print "match\n";
}

Объяснение

  • \D? соответствует любому символу, который являетсяне цифра

    • ? Квантор - сопоставляет от нуля до одного раза столько раз, сколько возможно, возвращая при необходимости (жадный)
  • 20 соответствует буквам 20 буквально (с учетом регистра)

  • \d{2} соответствует цифре

    • {2} Квантор - соответствует точно 2 раза
  • _ соответствует символу _ буквально

  • \d{2} соответствует цифре

    • {2} Квантор - соответствует 2 раза
  • _ соответствует символу _ буквально

  • \d{2} соответствует цифре

    • {2} Квантификатор - соответствует 2 раза
  • \D? соответствует любому символу, который не является цифрой

    • ? Quantifier - Соответствует от нуля до одного раза, столько раз, сколько возможно, возвращая по мере необходимости (жадный)

Проверьте демонстрацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...