Як зіставити рядки у стилі оболонки в Perl? Наприклад:
foo*
{bar,baz}.smth
joe?
foobar[0-9]
Відповіді:
5 за відповідь № 1Використовуючи регулярні вирази
Ваші приклади:
/foo.*(bar|baz).smth joe/
/foobard/
Однак, якщо те, що ви насправді хотіли, було схоже на оболонку розширення назви файлів (наприклад, вищезазначене було в контексті ls foobar[0-9]
), використовуйте glob()
функція:
my @files = glob("foo* {bar,baz}.smth joe");
my @foobar_files = glob("foobar[0-9]");
Зверніть увагу, що синтаксис регулярних виразів у Perl є НЕ мова розширення імені файлу
0 для відповіді № 2
File::FnMatch
виставляє ваші системи fnmatch(3)
реалізація, яка, ймовірно, реалізує для вас шаблони шаблону оболонки.
(Зауважте, що {bar,baz}.smth
не відповідає як такий, це просто "фігурне розширення" рядків.)