Perl修剪路径正则表达式

时间:2011-12-21 16:37:21

标签: regex perl path

所以我正在修剪一条看起来像这样的路径:

E:\folder\00000000\file.txt

我想用这个代替:

E:\folder\

我无法想出正则表达式。

之前我确实问了这个问题,但却把订单混在一起。

4 个答案:

答案 0 :(得分:5)

使用正则表达式操作路径很糟糕。

use Path::Class::File qw();
my $path = Path::Class::File->new_foreign('Win32', 'E:\\folder\\00000000\\file.txt');
# E:\folder\00000000\file.txt
my $base = $path->parent->parent;
# E:\folder

答案 1 :(得分:2)

假设变量驱动器名称和文件夹只有下划线/连字符:

/^[A-Z]:\\(\w|_|-)+\\/

将匹配E:\folder\

答案 2 :(得分:1)

使用此正则表达式 ^(.*[\\/])([^\\/]+[\\/][^\\/]+)$

$1将等于E:\folder\$2将等于00000000\file.txt

答案 3 :(得分:1)

use Path::Class qw( file dir );

my $file      = file('E:\\folder\\00000000\\file.txt');
my $orig_base = dir('E:\\folder');
my $new_base  = dir('F:\\directory');

# F:\directory\00000000\file.txt
say $file->relative($orig_base)->absolute($new_base);