2011-09-13 4 views

답변

2

경로가 시작되면 각 접두사

$path = <>; 

, 그것은 검사 디렉토리 이름은 접두사와 같습니다.

if($path =~ /\/$prefix\/(.*?)(\/|$)/) { 

동시에 접두사 ((.*?)) 다음의 슬래시까지 또는 끝까지 ((\/|$))까지 수집합니다. 경로 접두사 일치하는 경우, 수집 된 부분을 출력하고 루프 종료 :

print "$1\n"; 
last; 

그래서, 짧은에,이 경로를 일치하는 첫 번째 접두사를 찾습니다, 그리고 경로의 일부가 다음 인쇄 접두사.

편집 : "마지막 슬래시까지"-> "다음 슬래시까지"

+0

감사합니다 상세한 답변. ($ path = ~/\ /$prefix\/((())(\/|$)/) {ROOT1 (ROOT1/a/b)에서 두 번째 디렉토리를 가져 오려면 b로 변경하십시오. – Decrypter

+0

두번째 디렉토리를 얻으려면, 정규 표현식은 다음과 같습니다 :'/ \/$ prefix \ /.*? \/(. *?) (\/| $) /' –

+0

. 괄호는 변수에 할당한다는 의미입니까? 그래서 /\/$prefix\/((y))\/(.*?)(\/|$)/ 첫 번째 디렉토리 (a)는 $ 1이고 두 번째 (b)는 $ 2가됩니다. – Decrypter

3

ROOT1 또는 ROOT2 이전 입력의 다음 디렉토리를 인쇄합니다. 예 : 그런 다음 표준 입력 경로 판독

@prefixes = ("ROOT1", "ROOT2"); 

: 그것은 소정 프리픽스들의 어레이 세트

/ROOT1/x/y -> x 
/ROOT1/z  -> z 
/ROOT2/bla -> bla 
x/ROOT2/y/z -> y 
ROOT1/x  -> 
/bla/x  -> 
관련 문제