如何使用Perl匹配shell样式的字符串?

时间:2010-06-03 08:39:07

标签: perl

如何在Perl中匹配shell样式的字符串?例如:

foo*
{bar,baz}.smth
joe?
foobar[0-9]

2 个答案:

答案 0 :(得分:5)

使用regular expressions

你的例子是:

/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本身不匹配,它只是字符串的“大括号扩展”。)