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