2017-02-20 143 views
0

我對perl代碼做了一些修改,我無法理解爲什麼在正則表達式下面不匹配輸入行。爲什麼在perl中這個正則表達式不匹配

my $regex='^(780200703303)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+([1-9]\\d*)\\s+([1-9]\\d*)\\s+$'; 
my $line='780200703303 2   0   3   0   0   0   0   0   0   1 '; 
if ($line =~ m/$regex/) 
{ 
    print "Matched"; 
} 

在此先感謝

+1

除非需要多個連續的反斜槓或除非反斜槓是字符串中的最後一個字符,否則不需要在單引號內部轉義反斜槓。 – Borodin

回答

6

因爲0不匹配[1-9]\d*


你有沒有考慮使用以下:

my @fields = split ' ', $line; 
if ($fields[0] == 780200703303) { 
    ... 
} 
3

您的測試字符串不匹配正則表達式。

my $regex='\\s+([1-9]\\d*)\\s+([1-9]\\d*)\\s+$'; 
my $line='   0   1 '; 

0不匹配([1-9]\d*)


讓你的正則表達式使用qr operator簡單。

my $regex= qr/\s+([1-9]\d*)\s+([1-9]\d*)\s+$/; 
相關問題