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) : '';

明らかに、2 番目のソリューションよりも 1 番目のソリューションを強くお勧めします。

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