2014-09-12 91 views
-1

我需要從字符串捕獲子字符串。爲此,我使用了一個Regx,但在我的代碼中沒有按預期工作。爲什麼同樣的正則表達式有差異行爲

奇怪的是,如果我不是從用戶正在輸入相同至REGx工作正常:

這裏是我的代碼:

案例一:做工精細

use strict; 
use warnings; 
my $path = "\\\\xyz\\abc\\def\\Logs\\LA.1.0\\04.04.04.128.281\\September-10---15.28.5\\wxzLogs\\PostBootLogs\\Complete_Logs_2014091016000\\ANR\\traces.txt_20140910204706"; 
my ($captured) = $path =~ /(.+?) \\PostBootLogs/x; 
print "$captured\n"; 

Cas-2不工作:

my $path = $ARGV[0]; 
copylog($path); 

sub copylog { 
    print "Before_path -> $path\n"; 
    my ($captured) = $path =~ /(.+?) \\PostBootLogs/x; 
    print "After_path -> $path\n"; 
} 

在這兩種情況下,我使用的是相同的字符串。我需要在第二種情況下使用regx,所以任何人都可以告訴我第二種情況有什麼問題。

+0

你如何調用腳本?請顯示完整的命令行。 – choroba 2014-09-12 11:30:42

+1

您正在打印出第二個腳本中的'$ path',而不是'$ captured'。 '$ path'具有原始數據,'$ captured'具有匹配的部分。 – 2014-09-12 11:34:14

+0

對不起,提問這樣愚蠢的問題,這是我的錯誤。我沒有注意到我不打印適當的可讀性。 – user59053 2014-09-12 11:40:35

回答

1

您是打印錯誤的變量,因爲在第一種情況下,你必須打印$captured變量 但在接下來的情況下,你必須打印$path,所以,你可以打印$captured,你得到確切的結果。

print "After_path -> $captured\n"; 
0

在bash中,你不需要在單引號內引用反斜槓。那就是你要輸入 '\ xyz \ abc \ def \ Logs \ LA.1.0 ...'。希望這會有所幫助。

相關問題