2012-09-18 2 views

답변

1
/[^\\]+\.[^\\]+/ 

. 내기로 구분 아무것도 캡처 두 개의 백 슬래시를 단다. 이게 당신이 찾는 곳 이니? $ 결과 약

+0

오른쪽,하지만 당신은 위의 문자열에서 그 testQEM.txt를 얻기 위해 코드의 전체 라인을 작성할 수 있습니다? – user1288329

+0

그것은 당신이 썼던 것과 똑같지 만,이 정규식 대신에 당신의 것입니다. – FrankieTheKneeMan

0
my $file = '\main\ABC_PRD\ABC_QEM\1\testQEM.txt\main\ABC_QEM\1'; 
my ($result) = $file =~ /\\([^\\]+\.[^\\]+)\\/; 

괄호를 차례로 괄호에 일치하는 것을 돌려 오른쪽 표현식의 목록 컨텍스트를 강제로.

+0

대단히 감사합니다! 결과는 옳지 만 표현을 이해하지 못하고 공부할 것입니다. – user1288329

1

디렉토리 이름에 마침표가 포함될 수 있으므로 다소 어렵습니다. 이는 * 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 요소를 함께 결합하고 경로가 일반 파일인지 테스트합니다. 그렇다면 경로의 마지막 부분을 저장하고 루프를 종료합니다.

파일이 마침표가있는 경로의 유일한 부분임을 보장 할 수 있으면 다른 해결 방법 중 하나를 사용하는 것이 좋습니다.

0

사용 정규식 패턴 /(?=[^\\]+\.)([^\\]+)/

my $path = '\main\ABC_PRD\ABC_QEM\1\testQEM.txt\main\ABC_QEM\1'; 
print $1 if $path =~ /(?=[^\\]+\.)([^\\]+)/; 

시험이 코드 here.

3

경로가 파일 노드의 절반을 가질 수 없으므로 이해할 수 없습니다. 여러 경로가 어떻게 든 연결되어 있습니까? 어쨌든

, 난 당신이 경로가

use strict; 
use warnings; 

my $path = '\main\ABC_PRD\ABC_QEM\1\testQEM.txt\main\ABC_QEM\1'; 

my @path = split /\\/, $path; 
my $file = shift @path; 
$file .= '\\'.shift @path until -f $file or @path == 0; 

print "$file\n"; 
+0

이 문자열은 ClearCase에 의해 생성됩니다. 원래 문자열은 "M : \ ccadm01_ABC_BUILD \ Informatica_AVOB \ ABC_infa \ dummy @@ \ main \ ABC_PRD \ ABC_QEM \ 1 \ testQEM.txt \ main \ ABC_QEM \ 1"입니다. 다음과 같은 실제 파일을 재구성하고 싶습니다 : M : \ ccadm01_ABC_BUILD \ Informatica_AVOB \ ABC_infa \ dummy \ testQEM.txt – user1288329

0
>echo "\main\ABC_PRD\ABC_QEM\1\testQEM.txt\main\ABC_QEM\1"|perl -pi -e "s/.*([\\][a-zA-Z]*\.txt).*/\1/" 
\testQEM.txt 
+0

파일은 .txt뿐만 아니라 모든 확장자가 될 수 있습니다. 그리고 나에게 펄 코드의 완전한 라인을 제공해주세요. 이것은 perl 스크립트 내에서 수행되어야합니다. – user1288329

0

난 당신이 원리를 이해 할 수있다 제안 예를 여기 -f

을 사용하여 실제 파일로의 유효성을 검사하는 첫 번째 노드입니다 찾고 있지만 작동 제안 * 및 + 작동 방법과 같은 regexp Backtracking. 만 같은 정규 표현식에 대해 조금 변화합니다

/(.+\\)(.+\..+?)(\\.+)/ 
관련 문제