디렉토리 이름에 마침표가 포함될 수 있으므로 다소 어렵습니다. 이는 * nix Systems에서 특히 그렇지만 Windows에서도 유효합니다.
따라서 가능한 각 하위 경로는 파일에 대해 반복적으로 테스트해야합니다.
나는 아마 이런 식으로 뭔가를 시도 할 것 (상호 운용성 당신을 위해 문제가없는 경우 백 슬래시로 변경)
my $file;
my $weirdPath = q(/main/ABC_PRD/ABC_QEM/1/testQEM.txt/main/ABC_QEM/1);
my @parts = split m{/} $weirdPath;
for my $i (0 .. $#parts) {
my $path = join "/", @parts[0 .. $i];
if (-f $path) { # optionally "not -d $path"
$file = $parts[$i];
last;
}
}
print "file=$file\n"; # "file=testQEM.txt\n"
내가 모든 슬래시에서 이상한 경로를
split
. 그런 다음 첫 번째
$i+1
요소를 함께 결합하고 경로가 일반 파일인지 테스트합니다. 그렇다면 경로의 마지막 부분을 저장하고 루프를 종료합니다.
파일이 마침표가있는 경로의 유일한 부분임을 보장 할 수 있으면 다른 해결 방법 중 하나를 사용하는 것이 좋습니다.
오른쪽,하지만 당신은 위의 문자열에서 그 testQEM.txt를 얻기 위해 코드의 전체 라인을 작성할 수 있습니다? – user1288329
그것은 당신이 썼던 것과 똑같지 만,이 정규식 대신에 당신의 것입니다. – FrankieTheKneeMan