Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Регулярка


Автор: nankko 23.6.2010, 18:04
Доброго времени суток.

Есть код - работает. Обожаю perl, но работа связанна с другим. Практики очень мало :( Разбираюсь сам, вопрос к опытным.

Код

my $reg = "C:/DEV/PYTHON/Scripts/catchKill.py:";
$reg =~ s/(.*)\/(.*):/$2/;
print "\n$2";


Интересует часть поиска - (.*)\/(.*):. Правильно написана? Можно попроще? Любой критике буду рад. Спасибо.

Автор: Suppir 23.6.2010, 20:44
Смотря что вам нужно получить?

Автор: nankko 23.6.2010, 21:08
Код

my $reg = "C:/DEV/PYTHON/Scripts/catchKill.py:";
$reg =~ s/(.*)\/(.*):/$2/;
print "\n$reg";


так правильней))) 

получить хочу - catchKill.py

Автор: dva300 24.6.2010, 08:14
Цитата(nankko @ 23.6.2010,  21:08)
Код

my $reg = "C:/DEV/PYTHON/Scripts/catchKill.py:";
$reg =~ s/(.*)\/(.*):/$2/;
print "\n$reg";


так правильней))) 

получить хочу - catchKill.py

если точек больше не будет то так 
Код

print $1 if ($reg=~/(\w+\.\w+)/);


для пущей грамотности можно еще так

Код

print $1 if ($reg=~/(\w+\.\w+)\:$/);


или split-ом 
Код


my @mas = split(/\//,$reg);
$mas[$#mas] =~ s/\://;
print $mas[$#mas];

Автор: migaro 28.6.2010, 04:16
Юзай модули File::Basename и File::Spec  smile 

Например:

Код

use File::Basename qw/ basename /;

my $path = "/usr/bin/perl";

my $basename = basename $path;    # переменная $basename получает значение "perl".. =)


Все просто.. + так переносимее..  smile 
Эти модули включены в стандартную поставку Perl и ничего доставлять не нужно..  smile 

Автор: nankko 5.7.2010, 17:45
Спасибо. Проблема решена.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)