Perl新手腳本。試圖瞭解這是什麼:S這個Perl腳本是做什麼的?看起來很棘手
@prefixes = ("ROOT1", "ROOT2");
$path = <>;
foreach my $prefix (@prefixes) {
if($path =~ /\/$prefix\/(.*?)(\/|$)/) {
print "$1\n";
last;
}
}
Perl新手腳本。試圖瞭解這是什麼:S這個Perl腳本是做什麼的?看起來很棘手
@prefixes = ("ROOT1", "ROOT2");
$path = <>;
foreach my $prefix (@prefixes) {
if($path =~ /\/$prefix\/(.*?)(\/|$)/) {
print "$1\n";
last;
}
}
它設置預定義前綴的數組:
@prefixes = ("ROOT1", "ROOT2");
然後,它讀取來自標準輸入的路徑:
$path = <>;
對於每個前綴,它檢查如果路徑開始目錄名稱等於前綴:
if($path =~ /\/$prefix\/(.*?)(\/|$)/) {
同時,它收集跟在前綴((.*?)
)之後的任何內容,直到下一個正斜槓或直到結尾((\/|$)
)。如果路徑匹配的前綴,它打印出收集的部件和退出循環:
print "$1\n";
last;
因此,簡而言之,它會查找,路徑匹配的第一個前綴,並打印路徑的一部分繼字首。
編輯:「到最後的斜槓」 - >「到下一個斜槓」
它打印在前一個輸入中的下一個目錄是ROOT1或ROOT2。例子:
/ROOT1/x/y -> x
/ROOT1/z -> z
/ROOT2/bla -> bla
x/ROOT2/y/z -> y
ROOT1/x ->
/bla/x ->
感謝詳細的解答。如果($ path =〜/\/$prefix\/(.*?)(\/|$)/){更改爲從ROOT1(ROOT1/a/b)中獲取第二個目錄,其中b是返回 – Decrypter
要得到第二個目錄,正則表達式應該是:'/ \/$ prefix \ /.*?\ /(。*?)(\/| $)/' –
我得到了ya。我認爲括號意味着分配給一個變量?所以/\/$prefix\/(.*?)\/((**))((//$$)/第一個目錄(a)將是$ 1,第二個(b)將是$ 2 – Decrypter