2011-06-22 118 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/) { ... } 
相关问题