2016-02-01 2 views
-2

Я пытаюсь написать регулярное выражение в Perl, которое соответствует определенной части пути к файлу.Regex соответствует подстроке пути к файлу

Входная строка:

/usr/local/bin/mybinary 

Выход он должен соответствовать, чтобы:

/usr/local/bin 

Мой регулярное выражение:

(\ /.*\ /) 

Это соответствие /usr/local/bin/, но / после bin должны быть удалены.

+3

См. [Файл :: Базисное имя] (http://perldoc.perl.org/File/Basename.html) –

+1

Обновите свой вопрос с помощью исполняемого кода, который вы используете. – toolic

ответ

1

, если вы все еще хотите Regex так `\/

сделает работу :)

https://regex101.com/r/tK4mP7/1

+0

он должен удалить двоичную и косую черту с пути. –

+0

он делает - см. Ссылку на образец –

4

File::Basename может сделать это для вас:

use warnings; 
use strict; 
use File::Basename qw(dirname); 

my $in = '/usr/local/bin/mybinary'; 
my $out = dirname($in); 
print "$out\n"; 

__END__ 

/usr/local/bin 
+0

Регулярное выражение не требуется. –

+0

@mohanbabu: по какой причине? –

+0

Я изучаю их. Я хочу попробовать сделать их в регулярных выражениях вместо использования функций. :) –

2
(*).

Если вы возитесь с дорожками, рекомендуется использовать Path::Tiny. Он имеет почти все методы, которые вы могли хотеть для получения абсолютных/относительных путей, basenames, и многие другие, включая родителей ...

use Path::Tiny; 
my $path = path('/usr/local/bin/mybinary'); 
say $path->parent; # OUTPUT: '/usr/local/bin' 

Обновление: Старик совет

Я знаю, что ты сказал (в комментарии к ответу toolic), что вы изучаете регулярное выражение и хотите использовать их вместо функции. Часть регулярных выражений обучения также изучает, где они не подходят, или переполняют проблему. В этом случае подстрока пути от index 0 до rindex (правый индекс) '/' будет более эффективной.

my $string = '/usr/local/bin/mybinary'; 
say substr($string, 0, rindex($string, '/')); # OUTPUT: '/usr/local/bin' 
# or get the child 
say substr($string, rindex($string, '/') + 1); # OUTPUT: 'mybinary' 

Много PERL начинающих использовать регулярные выражения захватывает или split за проблемы, которые могут быть решены более эффективно использовать substr, наряду с index, rindex и/или length. Стоит изучить эти методы манипуляции строками, чтобы вы могли лучше решить, когда использовать регулярные выражения.

Смежные вопросы