$a = '/etc/init/tree/errrocodr/a.txt'
나는 $file
에 $dir
및 a.txt
에 /etc/init/tree/errrocodr/
을 추출 할. 어떻게해야합니까?어떻게 전체 경로를 디렉토리와 파일 이름으로 분리 할 수 있습니까?
(편집자 주 :. 원래의 질문은 당신이에 대한 정규 표현식이 필요하다고 추정) 그냥 Basename를 사용
$a = '/etc/init/tree/errrocodr/a.txt'
나는 $file
에 $dir
및 a.txt
에 /etc/init/tree/errrocodr/
을 추출 할. 어떻게해야합니까?어떻게 전체 경로를 디렉토리와 파일 이름으로 분리 할 수 있습니까?
(편집자 주 :. 원래의 질문은 당신이에 대한 정규 표현식이 필요하다고 추정) 그냥 Basename를 사용
을 :
이use File::Basename;
$fullspec = "/etc/init/tree/errrocodr/a.txt";
my($file, $dir, $ext) = fileparse($fullspec);
print "Directory: " . $dir . "\n";
print "File: " . $file . "\n";
print "Suffix: " . $ext . "\n\n";
my($file, $dir, $ext) = fileparse($fullspec, qr/\.[^.]*/);
print "Directory: " . $dir . "\n";
print "File: " . $file . "\n";
print "Suffix: " . $ext . "\n";
당신이 당신이 요청한 결과를 반환 볼 수 있지만 그건 또한 확장 기능을 캡처 할 수 있습니다 (위의 후반 섹션에서) :
Directory: /etc/init/tree/errrocodr/
File: a.txt
Suffix:
Directory: /etc/init/tree/errrocodr/
File: a
Suffix: .txt
또는 File :: Spec-> splitpath()를 살펴보십시오. 볼륨을 분리합니다 (그런 일을하는 플랫폼에있을 경우). 두 패키지 중 하나의 장점은 표준 및 휴대용입니다. –
당신이 이것에 대한 정규식이 필요하지 않습니다, 당신은) (이 dirname를 사용할 수 있습니다
use File::Basename;
my $dir = dirname($a)
그러나이 정규식 작동합니다 :
my $dir = $a
$dir =~ s/(.*)\/.*$/$1/
+1하지만 IMHO는 실수로 OP가 수행 한 경우에도 귀하의 예제에서 '$ a' 변수를 사용하지 않아야합니다. 'sort'에 사용됩니다. – dawg
어쩌면이 작동합니다
@^(.+/)/([^/]+)[email protected]
예 :
$a =~ m#^(.*?)([^/]*)$#;
($dir,$file) = ($1,$2);
그러나 다른 sa 이드를 위해서 단지 Basename
을 사용하는 것이 낫습니다.
그리고 sort
함수의 경우 특별한 의미가 있으므로 변수 이름으로 $a
과 $b
을 사용하는 것이 좋습니다.
정규식 솔루션은 완벽하게 합법적 인 필요라고 생각합니다. 정확히 여기에 대한 인터넷 검색 결과가 여기에 있습니다. 더 큰 일치 표현식의 일부인 그룹에서 파일 이름을 꺼내려고합니다. 내 시도는 다음과 같습니다.
~> echo "https://stackoverflow.com/a/b/c/d" | perl -ne '/(?<dir>\/(\w+\/)*)(?<file>\w+)/ && print "dir $+{dir} file $+{file}\n";'
dir /a/b/c/ file d
시도해보십시오. 그것은 파일 이름에 대해서는 최소한 작동하지만 수정하면 방향도 제공됩니다 : | 또는/|와 함께 둘 다 사용하는 경우 \ 대신 UNIX 시스템에서 수정할 수 있습니다.
$ filename = ~ s /(^.*/)// g; 어떻게 든 백 슬래시 2 전/표시되지 않습니다
...사용 @array = split("/", $a);
다음 $array[-1]
은 파일 이름입니다.
이 질문은 http://stackoverflow.com/questions/3511214/how-to-support-the-searching-file-based-on-regular-expression에서 이미 질문하지 않았습니까? 새 질문을 게시하는 대신 원래 질문을 명확하게 편집해야합니다. – Ether
@Ether, 그건 완전히 다른 질문입니다. 와일드 카드를 기반으로 파일 목록을 얻는 방법을 묻습니다. 이 방법은 하나의 파일 스펙을 여러 부분으로 분할하는 방법에 더 가깝습니다. – paxdiablo