2013-09-23 64 views
2

我的應用程序接受來自用戶的許多路徑,這些用戶可能或可能沒有用反斜槓終止這些路徑。我想確保所有路徑都以反斜槓()結尾,以便我可以追加文件名以執行其他各種操作。我已經經歷了很多的問題,在這裏挖一直沒能找到解決的辦法,所以我砍死在一起以下幾點:perl正則表達式將反斜槓添加到目錄路徑

foreach my $path (@Path) { 
     my $char = chop($path); 
     if ($char ne '\\') { 
     $path = $path . $char . '\\'; 
     } else { 
     $path = $path . '\\'; 
    } 

這可能是做這件事的一個非常可怕的方式,但它的作品。任何人都可以提供給我一個正則表達式的選擇

+3

應考慮使用一個模塊,用於路徑,如['文件:: Spec'](http://search.cpan.org/perldoc?File%3A%3ASpec) – TLP

回答

1
$path =~ s/(?<!\\)$/\\/; 

(?<!\\)是負回顧後,這將導致匹配失敗如果先前的字符不是一個反斜線和$是串錨的端部。因此,如果最後一個字符是反斜槓,則該正則表達式將無法匹配任何內容,或者如果該字符不是反斜槓,則該字符串將匹配字符串中的最後一個字符。然後我們使用反斜槓作爲替換,所以如果正則表達式匹配,我們會在末尾添加一個反斜槓。

+3

'S/\\ ?$/\\ /'會做同樣的事情。 – TLP

+0

像魅力一樣工作。不勝感激。 – user2808297

+0

@ user2808297你說服了什麼?它不那麼容易,不安全或便攜性較差的部分? – TLP

8

使用File::Spec來建立你的路徑。它更容易,更安全,更便攜。

use File::Spec; 
for my $path (@Path) { 
    $path = File::Spec->catfile($path, "foo", "bar"); 
    # $path = "$path\foo\bar" -- regardless of previous line ending 
} 
相關問題