我拥有的是:
E:\folder\00000000\file.txt
我希望得到这个:
00000000\file.txt
问题是我循环遍历这些目录的列表并需要为每个目录删除它,而不仅仅是00000000目录,因为下一个是00000001,所以一个
我想出的正则表达式是:
.+\\00000000
让我这样:
\file.txt
任何想法都会很棒!
谢谢!
更新:废话!我搞砸了......
我想要捕捉的是与此相反的:
E:\folder\
所以我可以用不同的路径替换它。对不起: - /
答案 0 :(得分:6)
此模式可用:[^\\]+\\[^\\]+$
它说:任意数量的非正斜杠字符,然后是正斜杠,然后是更多非正斜杠,以及输入或行的结束。
答案 1 :(得分:2)
你正在处理路径。使用旨在处理路径的函数。
#!/usr/bin/env perl
use strict; use warnings;
use Path::Class;
my $path = Path::Class::File->new_foreign(
Win32 => 'E:\folder\00000000\file.txt'
);
my $top = dir($path->volume, $path->parent->dir_list(0, 2));
print "$top\n";
输出:
C:\Temp> t E:\folder
答案 2 :(得分:0)
尝试\\([^\\]+\\[^\\]+)$
并抓住$1
/ \1
分解为:
N.B。即使你在Windows上,你仍然可以在文件名中使用标准斜杠,所以如果你无法控制传入文件名的格式,你可能想要使用:
[\\\/]([^\\\/]+\\[^\\\/]+)$
...因为它会接受\
或/
作为路径分隔符。
答案 3 :(得分:0)
不要修剪,匹配!
$path = "E:\\folder\\00000000\\file.txt";
if ($path =~ /(\d+\\.*)$/) {
$result = $1;
print $result;
} else {
print "bad";
}