Регулярное выражение в Perl - PullRequest
0 голосов
/ 21 декабря 2011

Итак, я обрезаю путь, который выглядит следующим образом:

E:\folder\00000000\file.txt

Я хочу заменить это:

E:\folder\

И я не могу придумать регулярное выражение для этого.

Я спрашивал об этом раньше, но смешал заказ.

Ответы [ 4 ]

5 голосов
/ 21 декабря 2011

Управление путями с помощью регулярных выражений - отстой.

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
2 голосов
/ 21 декабря 2011

при условии, что имена переменных дисков и папок имеют только подчеркивание / дефис:

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

будет соответствовать E:\folder\

1 голос
/ 22 декабря 2011
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);
1 голос
/ 21 декабря 2011

Используйте это регулярное выражение ^(.*[\\/])([^\\/]+[\\/][^\\/]+)$

$1 будет равно E:\folder\, а $2 будет равно 00000000\file.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...