如何在Perl中匹配shell样式的字符串?例如:
foo*
{bar,baz}.smth
joe?
foobar[0-9]
答案 0 :(得分:5)
你的例子是:
/foo.*(bar|baz)\.smth joe/
/foobar\d/
但是,如果你真正想要的是类似shell的文件名扩展(例如上面是ls foobar[0-9]
的上下文),请使用glob()
函数:
my @files = glob("foo* {bar,baz}.smth joe");
my @foobar_files = glob("foobar[0-9]");
请注意,Perl中正则表达式的语法是NOT that of filename expansion language
答案 1 :(得分:0)
File::FnMatch
公开了系统的fnmatch(3)
实现,这可能就是为你实现shell的通配符模式。
(请注意,{bar,baz}.smth
与本身不匹配,它只是字符串的“大括号扩展”。)