1

我需要去掉变量中的最后一页名称。

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

3 回答 3

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);
于 2012-10-12T17:27:43.233 回答
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) : '';

显然,我强烈推荐第一个解决方案而不是第二个解决方案。

于 2012-10-12T17:26:21.440 回答
-3
($LastInUrl) = (split qr{/}, $Variable)[-1];
于 2012-10-12T17:42:01.760 回答