如何在Perl中使用正则表达式匹配子目录路径?

时间:2010-09-12 11:33:30

标签: regex perl

我想匹配/this/is/my/dir/name/anything但不是/this/is/my/dir/name/anything/anything2之类的路径。换句话说,我希望在第一级匹配``/ this / is / my / dir / name /`下的所有文件和子目录,但不要在较低级别上匹配。

2 个答案:

答案 0 :(得分:8)

您可以使用dirname中的File::Basename功能:

dirname($path) eq '/this/is/my/dir/name' or warn "No match";

UPD:如果您更喜欢使用正则表达式:

my $dirname = '/this/is/my/dir/name';
$path =~ m|^$dirname/[^/]+/?$| or warn "No match";

答案 1 :(得分:3)

斜杠为默认分隔符带来问题,最后使用leaning toothpick problem。幸运的是,如果您使用通用表单,Perl 5允许您选择自己的分隔符:m//。鉴于您想要匹配整个字符串而不仅仅是一个子字符串,您将需要使用指定start of string (^) and end of string ($)的锚点:

if ($dirname =~ m{^/this/is/my/dir/name/anything$}) {
}

注意:^$锚点会受/m modifier的影响(它们会更改为行的起点和终点)。如果您要使用/m修饰符,则可能需要使用\A (start of string) and \Z (end of string or before a newline at the end of the string) or \z (end of string) assertions