Saturday, March 31, 2007
Perl 펄] 정규식 확장자 추출, 파일명에서; Regex Filename Extension
파일 이름에서, 정규식으로 확장자만 매치하여 추출하는 방법입니다.
다음과 같은 정규식을 이용합니다.
스크립트 파일명: example.pl
정규식을 사용하지 않고, 확장자만 추출하는 함수를 직접 구현: ▶▶ Perl/펄] 파일명에서, 확장자 구하는 함수; Get File Extension Only
File::Basename 모듈을 사용한 가장 편리한 방법: ▶▶ Perl 펄] 패스에서, 디렉토리명/파일명/확장자 분리 추출; Split Path Name
다음과 같은 정규식을 이용합니다.
.+\.(\w+)?$
Perl: 정규식으로 확장자 매치하여 추출 예제
스크립트 파일명: example.pl
#!/usr/bin/perl
use strict; use warnings;
my $filename;
my $ext;
my $s;
# 파일명 정의
$filename = "test.txt";
# 확장자 매치 (이 경우는 txt)
$filename =~ m<.+\.(\w+)?$>;
# 패스명의 슬래시(/)와 충돌하기에
# 정규식 구분자를 < 기호로 변경했음
# 매치된 확장자가 들어간 $1 이라는 변수의 값을 꺼냄
$ext = $1;
print "<", $ext, ">\n";
# 출력 결과: <txt>
# 알아보기 쉽게 확장자를 <> 기호로 둘렀습니다.
# 실제는 txt 만 출력됨
# 공백 들어간 파일명
$filename = "My Test.doc";
$filename =~ m<.+\.(\w+)?$>;
print "<", $1, ">\n";
# 출력 결과: <doc>
# 확장자 없는 파일명
$filename = "Cool";
$ext = "";
$ext = $1 if ($filename =~ m<.+\.(\w+)?$>);
print "<", $ext, ">\n";
# 출력 결과: <>
# 아무것도 매치되지 않았기에,
# $1 의 값은 예전 값인 doc 을 가지고 있음
# 따라서 if를 사용하여 구현
# 마침표가 2개 이상인 파일명에서도
$filename = "Oh... Hmm.Cool.xls";
print "<", $filename =~ m<.+\.(\w+)?$>, ">\n";
# <xls>
# 2중 확장자는 마지막 확장자만 추출
$filename = "Date.tar.gz";
print "<", $filename =~ m<.+\.(\w+)?$>, ">\n";
# <gz>
# 유닉스/리눅스 히든 파일 (앞에 점 있는 파일)
$filename = ".inputrc";
print "<", $filename =~ m<.+\.(\w+)?$>, ">\n";
# <>
# 윈도우에서는 이 경우 inputrc 를 확장자로 간주하지만
# 실은 확장자가 아니기에 없는 것이 정상
use strict; use warnings;
my $filename;
my $ext;
my $s;
# 파일명 정의
$filename = "test.txt";
# 확장자 매치 (이 경우는 txt)
$filename =~ m<.+\.(\w+)?$>;
# 패스명의 슬래시(/)와 충돌하기에
# 정규식 구분자를 < 기호로 변경했음
# 매치된 확장자가 들어간 $1 이라는 변수의 값을 꺼냄
$ext = $1;
print "<", $ext, ">\n";
# 출력 결과: <txt>
# 알아보기 쉽게 확장자를 <> 기호로 둘렀습니다.
# 실제는 txt 만 출력됨
# 공백 들어간 파일명
$filename = "My Test.doc";
$filename =~ m<.+\.(\w+)?$>;
print "<", $1, ">\n";
# 출력 결과: <doc>
# 확장자 없는 파일명
$filename = "Cool";
$ext = "";
$ext = $1 if ($filename =~ m<.+\.(\w+)?$>);
print "<", $ext, ">\n";
# 출력 결과: <>
# 아무것도 매치되지 않았기에,
# $1 의 값은 예전 값인 doc 을 가지고 있음
# 따라서 if를 사용하여 구현
# 마침표가 2개 이상인 파일명에서도
$filename = "Oh... Hmm.Cool.xls";
print "<", $filename =~ m<.+\.(\w+)?$>, ">\n";
# <xls>
# 2중 확장자는 마지막 확장자만 추출
$filename = "Date.tar.gz";
print "<", $filename =~ m<.+\.(\w+)?$>, ">\n";
# <gz>
# 유닉스/리눅스 히든 파일 (앞에 점 있는 파일)
$filename = ".inputrc";
print "<", $filename =~ m<.+\.(\w+)?$>, ">\n";
# <>
# 윈도우에서는 이 경우 inputrc 를 확장자로 간주하지만
# 실은 확장자가 아니기에 없는 것이 정상
정규식을 사용하지 않고, 확장자만 추출하는 함수를 직접 구현: ▶▶ Perl/펄] 파일명에서, 확장자 구하는 함수; Get File Extension Only
File::Basename 모듈을 사용한 가장 편리한 방법: ▶▶ Perl 펄] 패스에서, 디렉토리명/파일명/확장자 분리 추출; Split Path Name
tag: perl
Perl | 펄
tag: regex
정규식 | 정규표현식 | Regex | Regular Expression
<< Home