2011-09-13 81 views

回答

2

它設置預定義前綴的數組:

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

然後,它讀取來自標準輸入的路徑:

$path = <>; 

對於每個前綴,它檢查如果路徑開始目錄名稱等於前綴:

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

同時,它收集跟在前綴((.*?))之後的任何內容,直到下一個正斜槓或直到結尾((\/|$))。如果路徑匹配的前綴,它打印出收集的部件和退出循環:

print "$1\n"; 
last; 

因此,簡而言之,它會查找,路徑匹配的第一個前綴,並打印路徑的一部分繼字首。

編輯:「到最後的斜槓」 - >「到下一個斜槓」

+0

感謝詳細的解答。如果($ path =〜/\/$prefix\/(.*?)(\/|$)/){更改爲從ROOT1(ROOT1/a/b)中獲取第二個目錄,其中b是返回 – Decrypter

+0

要得到第二個目錄,正則表達式應該是:'/ \/$ prefix \ /.*?\ /(。*?)(\/| $)/' –

+0

我得到了ya。我認爲括號意味着分配給一個變量?所以/\/$prefix\/(.*?)\/((**))((//$$)/第一個目錄(a)將是$ 1,第二個(b)將是$ 2 – Decrypter

3

它打印在前一個輸入中的下一個目錄是ROOT1或ROOT2。例子:

/ROOT1/x/y -> x 
/ROOT1/z  -> z 
/ROOT2/bla -> bla 
x/ROOT2/y/z -> y 
ROOT1/x  -> 
/bla/x  -> 
相關問題