删除字符串中的最后一个URL名称

时间:2012-10-12 17:22:01

标签: perl cgi

我需要删除变量中的最后一个页面名称。

这是我的代码到目前为止,但我松开了.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;

3 个答案:

答案 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];