Как сопоставить файл, который начинается с буквенно-цифровых символов и содержит только три из этих специальных символов._ -? - PullRequest
0 голосов
/ 29 сентября 2018

Я новичок в Perl и хотел сопоставить файлы, которые начинаются с AZ и 0-9.Они также содержат только . _ - специальные символы.
Это то, что я до сих пор:

if (($file !~ /^[a-zA-Z0-9][\-\_\.a-zA-Z0-9]*/)) {
    print ("error: invalid filename");
}

Я протестировал программу, и она может найти ошибки имени файла, такие как -5, $ 5, # 5,но он не может поймать имена файлов с ошибками, такими как 5 #, 5%, 5 @ и т. д.

Я вообще не мог выяснить настоящую проблему.Что я делаю не так?

1 Ответ

0 голосов
/ 30 сентября 2018

Проблема в том, что ваше регулярное выражение привязано в начале (^), но не в конце.Любое $file, которое начинается с , допустимое имя файла принимается.Поскольку 5# начинается с 5, оно проходит.

Исправление:

if ($file !~ /^[a-zA-Z0-9][\-_.a-zA-Z0-9]*\z/) {
    print "error: invalid filename\n";
}

\z соответствует только в конце строки, закрепляя образец в конце.

_ не является метасимволом регулярных выражений и не нуждается в экранировании.. не является метасимволом в группе [ ].

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