Есть ли в Perl регулярное выражение для поиска расширения файла? - PullRequest
20 голосов
/ 18 марта 2010

Есть ли в Perl регулярное выражение для поиска расширения файла? Например, если у меня есть «test.exe», как я могу получить «.exe»?

Ответы [ 5 ]

38 голосов
/ 18 марта 2010
my $file = "test.exe";

# Match a dot, followed by any number of non-dots until the
# end of the line.
my ($ext) = $file =~ /(\.[^.]+)$/;

print "$ext\n";
12 голосов
/ 18 марта 2010

использовать File :: Basename

  use File::Basename;
  ($name,$path,$suffix) = fileparse("test.exe.bat",qr"\..[^.]*$");
  print $suffix;
4 голосов
/ 27 января 2014

Здесь используется регулярное выражение для сопоставления файла расширения n-уровня шаблона (например, .tar.gz или .tar.bz2 ).

((\.[^.\s]+)+)$

Пример:

#!/usr/bin/perl

my $file1 = "filename.tar.gz.bak";
my ($ext1) = $file1 =~ /((\.[^.\s]+)+)$/;

my $file2 = "filename.exe";
my ($ext2) = $file2 =~ /((\.[^.\s]+)+)$/;

my $file3 = "filename. exe";
my ($ext3) = $file3 =~ /((\.[^.\s]+)+)$/;

my $file4 = "filename.............doc";
my ($ext4) = $file4 =~ /((\.[^.\s]+)+)$/;

print "1) $ext1\n"; # prints "1) .tar.gz.bak"
print "2) $ext2\n"; # prints "2) .exe"
print "3) $ext3\n"; # prints "3) "
print "4) $ext4\n"; # prints "4) .doc"
4 голосов
/ 18 марта 2010
\.[^\.]*$

Это даст вам все после последней точки (включая саму точку) до конца строки.

3 голосов
/ 18 марта 2010

Вы можете использовать File :: Basename для извлечения произвольного расширения файла:

use strict;
use warnings;
use File::Basename;
my $ext = (fileparse("/foo/bar/baz.exe", qr/\.[^.]*/))[2];
print "$ext";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...