Perl из URL или файла патча получить имя изображения и расширение - PullRequest
0 голосов
/ 15 января 2012

Я пытаюсь получить имя и расширение изображения для URL или локального пути, указанного с прямой или обратной косой чертой

Ввод может быть http://test.com/hi23.gif или / local / test /hi23.gif или C: \ test \ 323.gif или файл: \ bla \ 3235.gif

#input: filename (i.e: http://test.com/hi4324.gif)
sub getFileName
{
  my $input = shift;  
  (my $filename = $input)  =~ m/(\w+\.(jpg|png|gif|jpeg)$)/i;  
  return $filename;
}

#input: filename (i.e: hi4324.gif)
sub getExtension
{
  my $input = shift;  
  (my $extension = $input)  =~ m/\w+\.(jpg|png|gif|jpeg)$/i;  
  return $extension;
}

Ответы [ 3 ]

2 голосов
/ 15 января 2012

Если вы знаете, что ваш ввод всегда будет заканчиваться на /filename.ext, используйте простое регулярное выражение:

# $url has your url already
$url =~ /.*\/(.*?)\.(.*)/;
my ($filename, $ext) = ($1,$2);

Но если это может быть сложнее со строками запроса или другими различными форматами, тогдагораздо проще начать вытягивать модули.Просто должно быть слишком много переменных.Я всегда считал, что File :: Basename лучше всего использовать для этого при работе с файловой системой.Я не думаю, что это будет работать для URL, хотя.Основной модуль URI выглядит достаточно. URI :: Split и APR :: URI могут предложить немного больше гибкости.

0 голосов
/ 15 января 2012

Как насчет подпрограммы, которая возвращает все имя файла и расширение?

sub getFileNameExt {
  my ($path) = @_;
  return $1, $2 if $path =~ m{([^\\/.]+([^\\/]*)$)};
}

for my $p (qw(
    http://test.com/hi23.gif
    /local/test/hi23.gif
    C:\test\323.gif
    file:\bla\3235.gif)) {

  printf "%s - %s\n", getFileNameExt($p);
}

OUTPUT

hi23.gif - .gif
hi23.gif - .gif
323.gif - .gif
3235.gif - .gif
0 голосов
/ 15 января 2012
use strict;
use warnings;
use File::Basename;
my @input = qw( http://test.com/hi23.gif  /local/test/hi23.gif  C:\test\323.gif file:\bla\3235.gif);

foreach my $some(@input){ 
$some =~ s!\\!/!g;          
my $basename = basename( $some);

if($basename =~ m/(.*)\.(.*)/){
my ($image_name,$image_extension) = ($1,$2);
print "\nInput is $some\nImage name is = $image_name, and extension is   $image_extension";
};
}

OUTPUT

Input is http://test.com/hi23.gif
Image name is = hi23, and extension is gif
Input is /local/test/hi23.gif
Image name is = hi23, and extension is gif
Input is C:/test/323.gif
Image name is = 323, and extension is gif
Input is file:/bla/3235.gif
Image name is = 3235, and extension is gif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...