Tips in Action‎ > ‎정규식‎ > ‎

경로에서 디렉토리와 파일이름을 분리

전종필

/usr/local/bin/perl과 같은 파일의 경로에서 경로의 디렉토리부분과 파일이름을 분리해 내고자 할때 사용할 수 있는 팁입니다.
File::Basename이라는 모듈이 있긴 하지만, 단순한 분리만을 위한 것이라면 위 모듈까지 사용할 필요는 없습니다.

# $path에 /usr/local/bin/perl이 들어가 있다고 가정합니다.
( $dir, $file ) = ( $path =~ m|^(.*/)(.*)$| ); # 이 코드가 이해가 안되면 이 Tip으로..
print "$file at $dir\n" # perl at /usr/local/bin/
너무 간단합니다. 정규식이 너무 간단해서 좀 의심이 가시는 분도 있을 것입니다. 혹,

local/bin/perl at /usr/
가 출력되는 것이 아닌가 하는 의심을 가질 수 있습니다. 좋은 의문입니다. (그러나, 실험해 보지않고 의심을 가졌다면 나쁜 습관입니다. ^_^ )
정규식에서 *+, {2,5}와 같은 양(量)의 개념이 사용될 때에는 기본적으로 적용가능한 가장 큰 수가 적용됩니다. 따라서, 다음 코드는

$t = 'baaaaaaaaaar';
$t =~ /ba+/;
print $&,"\n";
$t =~ /ba{2,5}/;
print $&,"\n";
다음 내용이 아닌

a
aa
다음과 같은 내용을 출력합니다.

aaaaaaaaaa
aaaaa
그러므로 위에서 경로와 파일을 분리하는 코드에서도 (.*/)가 적용가능한 가장 긴 문자열인 ``/usr/local/bin/''에 일치되는 것입니다. 
Comments