/aaa/bbb/ccc/ddd/filename.ext
라는 스트링이 있을때, 이를 다음과 같이 분리하고 싶습니다. $1=/aaa/bbb/ccc/ddd $2=filename.ext
만일 filename.ext 만 있을 경우는 $1=/. $2=filename.ext
로 분리하고 싶구요.
정규식을 거의 처음 접하다보니 어떻게 해야 할지 전혀 감이 안잡히네요. 도움 부탁드립니다.
path 다루는 것은 운영체제 마다 delimeter도 다르므로 직접 처리하는 건 나중에 다른 플랫폼으로 포팅시 문제가 됩니다. Perl은 이미 이런 경우를 대비하여 스스로 알아서 적절히 path를 처리하는 기능을 가지고 있습니다.
위 같은 문제는 Perl Core Module(기본적으로 Perl과 같이 배포되는 모듈)에 포함된 File::Spec ( http://perldoc.perl.org/File/Spec.html ) 이란 모듈을 사용해서 다음과 같이 할 수 있습니다.
UNIX류
#!/usr/bin/env perl use strict; use warnings; use File::Spec; my $str = '/aaa/bbb/ccc/ddd/filename.ext'; my ( $volume, $directory, $file ) = File::Spec->splitpath( $str ); print "$volume | $directory | $file\n";
| /aaa/bbb/ccc/ddd/ | filename.ext
Windows
#!/usr/bin/env perl use strict; use warnings; use File::Spec; my $str = 'c:\aaa\bbb\ccc\ddd\filename.ext'; my ( $volume, $directory, $file ) = File::Spec->splitpath( $str ); print "$volume | $directory | $file\n";
c: | \aaa\bbb\ccc\ddd\ | filename.ext
알아서 잘 처리해주죠? :)
감사합니다. ^^
실은 boost 의 regex 모듈을 사용해서 정규식을 처리해야 하는데 디폴트가 perl 방식이어서 정규식을 여쭤본 것이었습니다.
안그래도 운영체제마다 다른걸 어떻게 처리해야 하나 하는 문제도 걱정이지만 그냥 '/' '\\' 둘중 하나라 치고 처리할 생각이었습니다.
죄송하지만 정규식으로도 어떻게 표현하면 좋을지 알려주실 수 있으신지요? ^^
Leo.
http://www.boost.org/doc/libs/1_40_0/libs/filesystem/doc/index.htm
감사합니다. 부스트에도 저런 모듈이 있는줄 처음 알았습니다.
근데 문서를 읽어봤지만 적절한 설명이나 예제를 못찾겠네요. filesystem 에서 경로와 파일명으로 분리하는 함수가 뭘까요? -_-
boost_fs::path cmd(argv[0]); string cwd; if (cmd.has_parent_path()) cwd = cmd.parent_path().string(); else cwd = ".";
이렇게 하니까 일단 path 와 파일명 분리가 가능하네요. 도움주신 분들께 감사드립니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
File::Spec 모듈을 써보세요.
path 다루는 것은 운영체제 마다 delimeter도 다르므로 직접 처리하는 건
나중에 다른 플랫폼으로 포팅시 문제가 됩니다. Perl은 이미 이런 경우를 대비하여
스스로 알아서 적절히 path를 처리하는 기능을 가지고 있습니다.
위 같은 문제는 Perl Core Module(기본적으로 Perl과 같이 배포되는 모듈)에 포함된
File::Spec ( http://perldoc.perl.org/File/Spec.html ) 이란 모듈을 사용해서 다음과 같이
할 수 있습니다.
UNIX류
결과
Windows
결과
알아서 잘 처리해주죠? :)
아아..
감사합니다. ^^
실은 boost 의 regex 모듈을 사용해서 정규식을 처리해야 하는데
디폴트가 perl 방식이어서 정규식을 여쭤본 것이었습니다.
안그래도 운영체제마다 다른걸 어떻게 처리해야 하나 하는 문제도 걱정이지만
그냥 '/' '\\' 둘중 하나라 치고 처리할 생각이었습니다.
죄송하지만 정규식으로도 어떻게 표현하면 좋을지 알려주실 수 있으신지요? ^^
Leo.
boost에도 있습니다.
http://www.boost.org/doc/libs/1_40_0/libs/filesystem/doc/index.htm
감사합니다.
감사합니다. 부스트에도 저런 모듈이 있는줄 처음 알았습니다.
근데 문서를 읽어봤지만 적절한 설명이나 예제를 못찾겠네요.
filesystem 에서 경로와 파일명으로 분리하는 함수가 뭘까요? -_-
Leo.
자답입니다.
이렇게 하니까 일단 path 와 파일명 분리가 가능하네요.
도움주신 분들께 감사드립니다.
Leo.
댓글 달기