我需要删除变量中的最后一个页面名称。
这是我的代码到目前为止,但我松开了.jpg扩展名,我需要保留它,需要的结果:ImageName256.jpg
#!/usr/bin/perl
print "Content-type: text/html\n\n";
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
$Variable = "http://www.MyDomain.com/SomefolderPath/ImageName256.jpg";
($LastInUrl) = $Variable =~ m(.*/(\w+));
print $LastInUrl;
答案 0 :(得分:6)
我通常会为这类事情避免使用正则表达式并按照以下方式处理:
#!/usr/bin/perl
use strict;
use warnings;
use URI;
use URI::Escape qw( uri_unescape );
use File::Basename;
my $variable = "http://www.MyDomain.com/SomefolderPath/ImageName256.jpg";
my $last_in_url = uri_unescape( basename( URI->new( $variable )->path ) );
print $last_in_url;
注意:File :: Basename的行为会根据使用的系统而改变。如果您想要可移植性,则必须使用以下内容:
my $fstype = fileparse_set_fstype('uri');
my $last = uri_unescape( basename( $uri->path ) );
fileparse_set_fstype($fstype);
答案 1 :(得分:4)
use URI qw( );
my $uri = "http://www.MyDomain.com/SomefolderPath/ImageName256.jpg";
$uri = URI->new($uri);
my $basename = ( $uri->path_segments )[-1];
如果您想继续使用正则表达式,则必须使用以下内容:
use URI::Escape qw( uri_unescape );
my $uri = "http://www.MyDomain.com/SomefolderPath/ImageName256.jpg";
my $basename = $uri =~ m{/([^/#?]*)(?=[#?]|\z)} ? uri_unescape($1) : '';
显然,我强烈推荐第一种解决方案。
答案 2 :(得分:-3)
($LastInUrl) = (split qr{/}, $Variable)[-1];