2011-06-22 119 views
1

我需要一個perl正則表達式來檢查$ currentLine中是否存在$ currentSearch。 檢查應包括$ currentLine中有「加載」關鍵字。perl正則表達式變量斜槓

比賽

$currentSearch = DNA/3/44.com/index.html 

TO

$currentLine = Load DNA/3/44.com/index.html .....(3) 

我試過,但它不匹配......

if($currentLine[$k] =~ m/Load\s+$currentSearch[$i]\s+\.+\\(d+\)/) 

編輯 即使這行不通

if($currentLine[$k] =~ m/$currentSearch[$i]/) 
+0

如果您正在定義currentSearch和currentLine變量,您需要刪除數組括號,因爲它不是字符串數組(也是$ k),如我的答案。如果您實際上將currentSearch和currentLine定義爲數組,請發佈定義。 –

回答

3

我懷疑你的問題來自不使用:

use strict; 
use warnings; 

在您的腳本。

首先,前兩條語句$currentSearch$currentLine中的字符串在它們周圍沒有引號。這可能是一個錯字,但看起來很奇怪。

其次,在你的if語句中,你將它們稱爲數組而不是標量。假設這不是另一個錯字,那可能是問題的根源。 $currentSearch$currentSearch[$i]指的是兩個完全不同的變量。

沒有警告和嚴格的,即使使用兩個未聲明和未定義的變量也不會導致任何錯誤的跡象。

其實這樣的:

perl -e 'if ($foo[0]=~ /$bar[1]/) { print "sure, why not?" }' 

實際上是一個成功的匹配,以及將打印字符串,即使這兩個變量@foo@bar完全排空。隨着strictwarnings,它會崩潰,像它應該燃燒。

不管怎麼說,這個工作:

my $cs = "DNA/3/44.com/index.html"; 
my $cl = "Load DNA/3/44.com/index.html .....(3)"; 

if ($cl =~ /Load\s+$cs[\s\.]+\((\d+)\)/) { 
    print "Yes: $1\n"; 
} else { print "Nope!" } 

如果你在搜索字符串中的任何元字符,它可以導致難以察覺的錯誤,在這種情況下,你可以嘗試在quotemeta扔在你的搜索字符串。

3

你有一個錯誤 - 你需要轉義d字符來捕捉數字而不是'd'字符。你也有一個太多的反斜槓(你錯過了第一個paren)。

這裏是一個可行的腳本:

$currentSearch = "DNA/3/44.com/index.html"; 


$currentLine = "Load DNA/3/44.com/index.html .....(3)"; 


if($currentLine =~ /Load\s+$currentSearch\s+\.+\(\d+\)/) { 
    print "matched\n"; 
} else { 
    print "no match\n"; 
} 
+0

沒有要求匹配「.....(3)」。只需停止'$ currentSearch'。 –

0
if ($currentLine =~ /Load\s+\Q$currentSearch\E/) { ... } 
相關問題