2010-03-18 14 views

Respuesta

38
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"; 
4
\.[^\.]*$ 

Esto le daría todo lo que tras el último punto (incluyendo el punto en sí) hasta el final de la cadena.

3

Usted podría utilizar File::Basename para extraer una extensión de archivo arbitrario:

use strict; 
use warnings; 
use File::Basename; 
my $ext = (fileparse("/foo/bar/baz.exe", qr/\.[^.]*/))[2]; 
print "$ext"; 
12

uso de archivos :: Nombre base

use File::Basename; 
    ($name,$path,$suffix) = fileparse("test.exe.bat",qr"\..[^.]*$"); 
    print $suffix; 
+2

Nunca pensé que File :: Basename fuera bueno para este trabajo, teniendo en cuenta que debe proporcionar el patrón que podría haber usado con el operador de coincidencia para hacer lo mismo. –

+2

si es solo para obtener extensión, una expresión regular normal sería suficiente. Pero File :: Basename analiza el resto de la ruta también. Si OP necesita obtenerlos además de la necesidad de extensión, File :: Basename es útil. – ghostdog74

+0

Advertencia: Tenía archivos que los usuarios nombraron como 'filename..doc' y la actualización del sufijo anterior devolverá' ..doc' como la extensión. Prefiera la respuesta @toolic (o Perl Docs for File: Basename) si va en esta dirección. –

3

Aquí se trata de una expresión regular para que coincida con el patrón n archivo de extensión de nivel (por ejemplo, .tar.gz o .tar.bz2).

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

Ejemplo:

#!/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" 
Cuestiones relacionadas